รหัสขยะเป็นอาการปวดหัว บทความนี้แนะนำวิธีแก้ปัญหาของภาษาจีนที่ผ่านการอ่านออกมาในฤดูใบไม้ผลิ MVC ซึ่งมีดังนี้:
1: โซลูชันสำหรับรหัสที่อ่านไม่ออกหลังจากแบบฟอร์มส่งคอนโทรลเลอร์ได้รับพารามิเตอร์ภาษาจีน
หมายเหตุ: การเข้ารหัสหน้า JSP ถูกตั้งค่าเป็น UTF-8
วิธีการส่งแบบฟอร์มจะต้องโพสต์ ตัวกรองการเข้ารหัสสปริงภายใต้วิธี GET ไม่มีผลกระทบใด ๆ
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <form action = "$ {ctx}/ผู้ใช้/adduser" name = "userform" method = "post">แก้ไข web.xml และเพิ่มตัวกรองการเข้ารหัสดังนี้ (โปรดทราบว่าคุณต้องตั้งค่าพารามิเตอร์ forceencoding เป็น TRUE)
<tilter> <melter-Name> orgspringframeworkworkwebfilterCharacterencodingFilter <init-param> การเข้ารหัส </param--param--marim--marist-param--maram--maram- <param-name> forceencoding </param-name> <param-value> True </param-value> </itrient-Param> </filter> <filter-mapping>
หมายเหตุ: การเข้ารหัสฐานข้อมูลสนับสนุนภาษาจีนหรือไม่
ตารางฐานข้อมูลและฟิลด์ตารางถูกต้องหรือไม่?
แก้ไขการตั้งค่าพารามิเตอร์ของฐานข้อมูลการเชื่อมต่อการกำหนดค่า:
<property name = "url" value = "jdbc: mysql: // localhost: 3306/dbname? useunicode = true & caracterencoding = utf-8"> </property>
กรณีแรก:
ป้อนหน้า JSP เป็นภาษาจีนและป้อนรหัสที่อ่านไม่ออกคอนโทรลเลอร์ ในเวลานี้สิ่งที่คุณต้องตั้งค่าคือการเพิ่มตัวกรองที่เข้ารหัส (ตัวกรอง) เพื่อรวมการเข้ารหัสลงใน UTF-8 รหัสมีดังนี้:
web.xml ไฟล์กำหนดค่า:
<silter> <tilter-Name> ตัวละคร actaryencodingfilter </filter-name> <silter-class> orgspringframeworkworkwebfiltercharacterencodingfilter </filter-class> <int-param> <param-name> การเข้ารหัส am-name> <param-value> UTF-8 </param-value> </itrient-Param> </tilter> <Filter-Mapping> <stilter-name> ตัวอักษร actaryencodingfilter </filter-name> <url-pattern>/*</url-pattern>
ควรสังเกตที่นี่ว่าเป็นการดีที่สุดที่จะวางรหัสนี้ที่จุดเริ่มต้นของ webXML เพราะมีลำดับของการสกัดกั้นและหากวางไว้ที่ด้านหลังมันเป็นเรื่องง่ายที่จะบล็อกมัน
กรณีที่สอง:
ฐานข้อมูลข้อมูลภาษาจีนหน้า JSP จะแสดงรหัสที่อ่านไม่ออก (ไม่ใช่รหัสที่อ่านไม่ออกในแง่ที่เข้มงวด แต่นำเสนอในรูปแบบของเครื่องหมายคำถาม)
เนื่องจากการโต้ตอบข้อมูลระหว่างด้านหน้าและแบ็กเอนด์ของเราใช้ข้อมูล JSON ฉันไม่รู้เกี่ยวกับเหตุผลของสถานการณ์นี้มากนัก ฉันไม่เคยพบมาก่อน ฉันสามารถตำหนิตัวเองได้เพียงทำโครงการน้อยเกินไปและมันก็ไม่ยากที่จะแก้ปัญหา ฉันแค่ต้องตั้งค่ารูปแบบการเข้ารหัสเมื่อแปลง JSON รหัสมีดังนี้:
ResponsesetContentType ("Application/JSON; charset = UTF-8"); // ป้องกันการส่งข้อมูลจากรหัสที่อ่านไม่ออกหากคุณเขียนประโยคนี้คุณจะไม่มีรหัสที่อ่านไม่ออกอีก
สถานการณ์ที่สาม:
หน้านี้ยังถูกต้องที่จะส่งผ่านไปยังคอนโทรลเลอร์ แต่หลังจากบันทึกลงในฐานข้อมูลแล้วมันจะอ่านไม่ออก (ไม่ใช่รหัสที่อ่านไม่ออกอย่างเข้มงวดเหมือนข้างต้นมีเครื่องหมายคำถามทั้งหมด)
ปัญหานี้ทำให้ฉันลำบากอยู่พักหนึ่ง ฉันเริ่มรู้สึกว่ารูปแบบการเข้ารหัสของฐานข้อมูลไม่ถูกต้อง ยังคงเป็นไปไม่ได้ที่จะสร้างฐานข้อมูลใหม่ด้วยรูปแบบการเข้ารหัสของ UTF-8 ในที่สุดฉันก็รู้สึกว่ามันเป็นปัญหากับ JBoss เซิร์ฟเวอร์ของเราใช้ JBOSS ฉันค้นหาอินเทอร์เน็ตและเพิ่มรูปแบบการเข้ารหัสเมื่อเชื่อมต่อกับแหล่งข้อมูล รหัสมีดังนี้:
<dataSource jta = "true" jndi-name = "java: jboss/dataSources/jcmysqlds" pool-name = "jcmysqlds" เปิดใช้งาน = "true" use-java-context = "true"> <การเชื่อมต่อ -url> jdbc: mysql: // 46/itoo_basic_basic? useunicode = true & caractionencoding = utf-8 </connection-url> ไม่ดี> เท็จ </prefill> <use-strict-min> false </use-strict-min> <dlush-strategy> failingConnectiononly </flush-sstrategy> </pool> <ความปลอดภัย> href = "http: // wwwitnet/edu/ebg/" target = "_ blank"> word </a>> 123456 </pass <a href = "http: // wwwitnet/edu/ebg/" target = "_ blank">
1. หน้าอ่านไม่ออก
หน้าเว็บค่อนข้างง่ายในการแก้ปัญหาและพวกเขามักจะตั้งค่าชุดอักขระที่เกี่ยวข้องในหน้า JSP ที่เกี่ยวข้องหรือหน้า HTML ชอบ
%@page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%
2. การถ่ายโอนค่ารหัสที่อ่านไม่ออก
ในระหว่างกระบวนการส่งค่ารหัสที่อ่านไม่ออกก็ปรากฏขึ้นบ่อยครั้ง ไม่ต้องพูดถึงสถานการณ์ที่เป็นอย่างไรโซลูชันที่ใช้กันทั่วไปรวมถึงการกำหนดค่าตัวกรองที่ระบุต่อไปนี้
<!-กำหนดค่าตัวกรองคำขอตั้งค่ารูปแบบการเข้ารหัสเป็น UTF-8 หลีกเลี่ยงภาษาจีนที่อ่านไม่ออก-> <filter> <filter-Name> SpringUTF8ENCODING </filter-name> <param-value> UTF-8 </param-value> </init-param> <init-Param> <init-Param> <param-Name> ForceEncoding </param-Name>
ตั้งค่าอักขระคำขอ
บ่อยครั้งหลังจากผ่านไปจากแผนกต้อนรับไปยังคอนโทรลเลอร์หรือการกระทำที่เกี่ยวข้องรหัสที่อ่านไม่ออกจะปรากฏขึ้น แนวคิดทั่วไปของฉันคือการพิมพ์ชุดอักขระเริ่มต้นของคำขอตัวเองก่อน
SystemoutPrintln (RequestgetCharacterencoding ());
จากนั้นตามสถานการณ์หากไม่ได้พิมพ์ตัวอักษรที่ต้องการตั้งค่าชุดอักขระที่เกี่ยวข้อง
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 & caracterencoding = utf-8
ดังที่ได้กล่าวไว้ข้างต้น useunicode จะต้องเชื่อมต่อกับตัวละครที่ตั้งไว้ในฐานข้อมูล & นี่คืออะไร? นี่เป็นปัญหาใน XML & เป็นตัวละครหลบหนีของ & หากคุณใช้ XML เพื่อกำหนดค่าการกำหนดค่าการเชื่อมต่อฐานข้อมูลที่เกี่ยวข้องนั่นคือปัญหา แต่ถ้าคุณใช้คุณสมบัติ ** จะมีปัญหาและคุณต้องลบแอมป์ นี่คือประสบการณ์ของ LZ ที่มีหัวเลือด
ฐานข้อมูล
ปัญหาที่นี่ก็ค่อนข้างยากที่จะจัดการกับ เข้าสู่ระบบฐานข้อมูล
ดูรูปแบบการเข้ารหัสฐานข้อมูล
<img src = "http: // www2ctocom/uploadfile/collfiles/20150302/png" 7plu ninja htahle ninja: 1opentablaug: Sun 1 วัน sql> "=" ">
คุณสามารถดูว่าชุดอักขระของเซิร์ฟเวอร์เป็นภาษาละติน 1 หรือไม่ ที่นี่เราต้องพูดคุยเกี่ยวกับชุดตัวละครที่ใช้กันทั่วไป
เพื่อความสงบสุขและความเจริญรุ่งเรืองของโลกองค์กร ISO ได้กำหนดวิธีแก้ปัญหาตัวละคร Unicode การเข้ารหัส Unicode เป็นบริดจ์ของการสื่อสารซึ่งกันและกันและการแปลงระหว่างการเข้ารหัสที่แตกต่างกันรวมถึงไบนารี 32 บิตดังนั้นจึงสามารถรองรับตัวละครได้กับพลังของ 2 ซึ่งเพียงพอสำหรับชีวิต Unicode แบ่งออกเป็นสามวิธีตามความต้องการที่แตกต่างกัน
UTF8: ใช้เพื่อแก้ปัญหาการเข้ารหัสที่ปรากฏในภาษาต่าง ๆ ในระดับสากล สำหรับภาษาอังกฤษมีการใช้หลัก 8 หลักและใช้ภาษาจีน 3 หลัก สามารถแสดงบนเบราว์เซอร์ใด ๆ ที่รองรับชุดอักขระ UTF9 โดยไม่ต้องประมวลผลเพิ่มเติม
อีกสองคนคือ UTF16 และ 32 ซึ่งจะไม่ได้รับการแก้ไขที่นี่ คุณสามารถตรวจสอบด้วยตัวเอง แต่ก็ยังคงเป็นเพราะความสะดวกในการจัดเก็บและใช้ในการตัดสินใจว่าจะใช้อันไหน
โอเคสิ่งที่ค่อนข้างคุ้นเคยคือ GBK ซึ่งเป็นที่รู้จักกันทั่วไปว่าเป็นรหัสมาตรฐานแห่งชาติที่กำหนดโดยมาตรฐานแห่งชาติของจีนและมีตัวละครจีนเท่านั้น ดังนั้นเมื่อเทียบกับทั้งสองแล้ว UTF8 จึงเข้ากันได้ดีกว่า แต่มีความจุสูงกว่า
กลับมาเร็ว ๆ นี้ถ้าคุณชาร์จชุดตัวละครหรือกลับมาและแก้ปัญหาก่อน ดังนั้นจึงโอเคที่จะใช้ GBK หรือ UTF8 ที่นี่ แต่ละติน 1 เป็นไปไม่ได้แน่นอนที่นี่มันถูกกำหนดโดยคำสั่งดังกล่าวเป็นหลัก
ชิ้นส่วนเซิร์ฟเวอร์ฐานข้อมูลและตารางข้อมูลถูกตั้งค่าแยกกันและต้องตั้งค่าการเข้ารหัสการเชื่อมต่อ การตั้งค่าการเข้ารหัสการเชื่อมต่อมีดังนี้:
mysql> set character_set_client = 'gbk'; mysql> set character_set_connection = 'gbk'mysql> set character_set_results =' gbk '
ตั้งค่าการเข้ารหัสและคุณสามารถแทรกภาษาจีนได้สำเร็จด้านล่าง ในความเป็นจริงมันสามารถแก้ไขได้ในหนึ่งประโยค
คำสั่งที่ใช้กันทั่วไป
ดูรูปแบบการเข้ารหัสฐานข้อมูล
แสดงตัวแปรเช่น 'character_set_%';
ดูการสร้างตารางในฐานข้อมูล
แสดงชื่อ Table TableName;
ตั้งค่ารูปแบบการเข้ารหัสฐานข้อมูล
setnames 'gbk';
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น