رمز القمامة هو صداع. تقدم هذه المقالة حلاً لمشكلة الصينية المشوهة في الربيع MVC ، وهو ما يلي:
1: حل رمز مشجعة بعد أن يحصل وحدة تحكم إرسال النموذج على المعلمات الصينية
ملاحظة: تم تعيين ترميز صفحة JSP على UTF-8
يجب أن تكون طريقة تقديم النموذج بعد. مرشح ترميز الربيع تحت طريقة GET ليس له أي تأثير
<٪@ page language = "java" import = "java.util.*" pageencoding = "utf-8" ٪> <form action = "$ {ctx}/user/adduser" name = "userform" = "post">تعديل web.xml وإضافة مرشحات الترميز على النحو التالي (لاحظ أنك تحتاج إلى تعيين قيمة معلمة ForceenCoding إلى True)
<Ivilter> <ilter-name> nAffleenCodingFilter </filter-name> <filter-class> orgSpringFrameworkWorkWebFilterChaterEncodingFilter </filter-class> <Ing-param> <Ind-Param> الترميز </param-name> <baram-value> <Param-Name> forceencoding </param-name> <param-value> true </param-value> </IPT-PARAM> </filter> <filter mapping> <filter-name> directionodingfilter </filter-name> <url-pattern>/*</url-pattern>
ملاحظة: هل ترميز قاعدة البيانات الدعم الصينية
هل جداول قاعدة البيانات وحقول الجدول صحيحة؟
قم بتعديل إعدادات المعلمة لقاعدة بيانات اتصال التكوين:
<property name = "url" value = "jdbc: mysql: // localhost: 3306/dbname؟ useUnicode = true & directionDing = utf-8"> </prereg>
الحالة الأولى:
أدخل صفحة JSP باللغة الصينية وأدخل رمز وحدة التحكم المشوهة. في هذا الوقت ، ما تحتاج إلى تعيينه هو إضافة مرشح مشفر (مرشح) لتوحيد الترميز في UTF-8. الرمز كما يلي:
ملف التكوين web.xml:
<Ivilter> <Ivilter-Name> distaryencodingFilter </filter-name> <lipter-class> orgspringframeworkworkwebfilterChaterEncodingFilter </filter-class> <Ing-param> <Param-Name> الترميز </par AM-NAME> <Param-value> utf-8 </param-value> </ith-param> </filter> <filter-mapping> <ilter-name> directionOdingFilter </filter-name> <url-pattern>/*</url-patern> </filter-mapping>
تجدر الإشارة هنا إلى أنه من الأفضل وضع هذا الرمز في بداية WebXML ، لأن هناك ترتيب اعتراض ، وإذا وضعت في الخلف ، فمن السهل حظره.
الحالة الثانية:
بيانات قاعدة البيانات الصينية ، تعرض صفحة JSP رمزًا مشويًا (وليس رمزًا مشويًا بالمعنى الصارم ، ولكن يتم تقديمه في شكل علامة استفهام)
نظرًا لأن تفاعل البيانات بين الواجهة الأمامية والخلفية لدينا يستخدم بيانات JSON ، لا أعرف الكثير عن سبب هذا الموقف. لم أواجهها من قبل. لا يمكنني إلا أن ألوم نفسي على القيام بمشاريع قليلة جدًا ، وليس من الصعب حلها. أنا فقط بحاجة إلى ضبط تنسيق الترميز عند تحويل JSON. الرمز كما يلي:
ReseSetContentType ("Application/JSON ؛ charset = UTF-8") ؛ // منع نقل البيانات من الشفرة المشوهةإذا كتبت هذه الجملة ، فلن يكون لديك أي رموز مشوهة مرة أخرى.
الوضع الثالث:
الصفحة صحيحة أيضًا لتمريرها إلى وحدة التحكم ، ولكن بعد حفظها في قاعدة البيانات ، سيتم تشويهها (إنها ليست رمزًا صارمًا ، تمامًا مثل ما سبق ، هناك كل علامات أسئلة)
هذه المشكلة قد أزعجتني لفترة من الوقت. بدأت أشعر أن تنسيق الترميز لقاعدة البيانات غير صحيح. لا يزال من غير الممكن إعادة إنشاء قاعدة البيانات بتنسيق الترميز لـ UTF-8. أخيرًا ، شعرت أنها كانت مشكلة مع JBOSS. يستخدم خادمنا JBOSS. لقد بحثت في الإنترنت وأضفت تنسيق الترميز عند الاتصال بمصدر البيانات. الرمز كما يلي:
<datasource jta = "true" jndi-name = "java: jboss/datasources/jcmysqlds" pool-name = "jcmysqlds" enabled = "true" use-java-context = "true"> <connection-url> jdbc: mysql: // 46/itoo_basic_basic؟ useUnicode = true & directionoding = utf-8 </section-url> <narving> mysql </sarv> <prof> <pref ill> false </repremill> <استخدام strict-min> false </use-strict-min> <flush-Strategy> failitingConnectiononly </flush-strategy> </suruction> security> <sustr-name> root </user-name> <pass <a href = "http: // wwwitnet/edu/ebg/" target = "_ blank"> word </a>> 123456 </pass
1. الصفحة مشوهة
من السهل حل الصفحات نسبيًا ، وغالبًا ما تقوم بإعداد مجموعات الأحرف ذات الصلة على صفحة JSP المقابلة أو صفحة HTML. يحب
٪@page language = "java" contentType = "text/html ؛ charset = utf-8" pageencoding = "utf-8" ٪
2. رمز القيمة المشفوفة
أثناء عملية نقل القيمة ، تظهر الرموز المشوهة أيضًا بشكل متكرر. ناهيك عن السيناريو ، تتضمن الحلول الشائعة الاستخدام التكوينات التالية المرشحات المحددة
<!-قم بتكوين مرشح الطلب ، وقف تعيين تنسيق الترميز إلى UTF-8 ، وتجنب المشوهة الصينية-> <filter> <filter-name> springUtf8encoding </filter-name> <lipter-class> orgspringframeworkworkworkerChaterCheterCteringfilter </filter-class> <inip-baram> <Param-value> utf-8 </parm-value> </ith-param> <Ing-param> <Ing-param> <Param-Name> forceencoding </param-name> <param-value> true </param-value> </ith-param> </filter>
تعيين مجموعة الأحرف طلب
في كثير من الأحيان ، بعد تمريره من مكتب الاستقبال إلى وحدة التحكم أو الإجراء المقابل ، يظهر رمز مشتعل. فكرتي العامة هي طباعة مجموعة الأحرف الافتراضية للطلب نفسه أولاً.
SystemOutPrintln (requestGetCharCterEncoding ()) ؛
ثم ، وفقًا للموقف ، إذا لم تتم طباعة مجموعة الأحرف المطلوبة ، فقم بتعيين مجموعة الأحرف المقابلة.
requestSetcharActerEncoding ("UTF-8") ؛بالطبع ، قد لا يتم حل بعض المواقف. يمكنك استخدام ما يلي
String str = newstring ((requestgetParameter ("bigquestiontypename")) getBytes ("ISO-8859-1") ، "UTF-8")3. احفظ رمز قاعدة البيانات المشوهة
هذا معقد نسبيا. هنا ، يستخدم LZ MySQL ، ويستخدم MySQL لتقديم كيفية حل هذه المشكلة المشوهة
كما نعلم جميعًا ، ما إذا كان JDBC نقيًا أو سباتي أو JPA ، فمن الأفضل استخدامه في الأسفل. في الواقع ، إنه في الأساس JDBC ، ويتم تغليف الإطار المقابل فقط على أساس ذي صلة. لذلك بغض النظر عن نوع التكنولوجيا ، فإنه سيستخدم عنوان URL المتصل بقاعدة البيانات. لذلك يجب فحص عنوان URL أولاً
عنوان URL
سيضيف الموقف القياسي إعدادات مجموعة الأحرف المقابلة بعد الموقف المقابل ، على النحو التالي
jdbcurl = jdbc: mysql: /// itcastoa؟ useUnicode = true & directionoding = utf-8
كما ذكر أعلاه ، يجب توصيل UseUnicode بالحرف المحددة في قاعدة البيانات ، وما هذا؟ هذه مشكلة ، في XML & هي شخصية الهروب من &. إذا كنت تستخدم XML لتكوين تكوين اتصال قاعدة البيانات المقابل ، فهذه هي المشكلة. ولكن إذا كنت تستخدم خصائص ** ، فستكون هناك مشكلة ، ويجب عليك إزالة AMP. هذه هي في الواقع تجربة LZ لها رأس دموي.
قاعدة البيانات
المشكلة هنا من الصعب أيضًا التعامل معها. تسجيل الدخول إلى قاعدة البيانات
عرض تنسيق ترميز قاعدة البيانات
<img src = "http: // www2ctocom/uploadfile/collfiles/20150302/png" 7plu ninja htahle ninja: 1opentablaug: sun. 1 يوم sql> "=" ">
يمكنك معرفة ما إذا كانت مجموعة حرف الخادم هي LATIN1. هنا نحتاج إلى التحدث عن مجموعات الأحرف الشائعة الاستخدام.
من أجل السلام والازدهار في العالم ، قامت منظمة ISO بتعيين حل لمجموعة الأحرف Unicode. ترميز Unicode هو جسر للاتصال المتبادل والتحويل بين الترميزات المختلفة ، بما في ذلك ثنائي 32 بت ، بحيث يمكن أن يستوعب الشخصيات إلى قوة 2 ، وهو ما يكفي للحياة. ينقسم Unicode إلى ثلاثة حلول وفقًا لاحتياجات مختلفة.
UTF8: يستخدم لحل الترميز الذي يظهر بلغات مختلفة على المستوى الدولي. للغة الإنجليزية ، يتم استخدام 8 أرقام ، وللصينية ، يتم استخدام 3 أرقام. يمكن عرضه على أي متصفح يدعم مجموعة أحرف UTF9 دون مزيد من المعالجة.
الاثنان الآخران هما UTF16 و 32 ، والتي لن يتم تحريرها هنا. يمكنك التحقق من ذلك بنفسك ، ولكن لا يزال بسبب راحة التخزين والاستخدام لتحديد أي واحد لاستخدامه.
حسنًا ، الشخص المألوف نسبيًا هو GBK ، المعروف باسم الكود القياسي الوطني ، الذي صاغته المعايير الوطنية الصينية ، ويحتوي فقط على أحرف صينية. لذلك ، بالمقارنة مع الاثنين ، فإن UTF8 هو توافق أفضل ، ولكن لديه سعة تخزين أكبر.
عد قريبًا ، تقريبًا ، إذا قمت بشحن مجموعة الأحرف ، أو عدت وحل المشكلة أولاً. لذلك لا بأس في استخدام GBK أو UTF8 هنا. لكن latin1 بالتأكيد غير ممكن ، هنا يتم تعيينه بشكل أساسي من خلال هذا الأمر
يتم تعيين أجزاء الخادم وقاعدة البيانات وجدول البيانات بشكل منفصل ، ويجب تعيين ترميز الاتصال. إعدادات تشفير الاتصال هي كما يلي:
mysql> set former_set_client = 'gbk' ؛ mysql> set character_set_connection = 'gbk'mysql> set former_set_results =' gbk '
قم بإعداد الترميز ويمكنك إدراج الصينية أدناه بنجاح. في الواقع ، يمكن حلها في جملة واحدة.
أوامر شائعة الاستخدام
عرض تنسيق ترميز قاعدة البيانات
إظهار المتغيرات مثل "الحرف _set_ ٪" ؛
عرض إنشاء الجداول في قاعدة البيانات
إظهار إنشاء جدول Tablename ؛
تعيين تنسيق ترميز قاعدة البيانات
setNames 'GBK' ؛
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.