สองวิธีที่ใช้กันทั่วไปในการแก้อักขระที่อ่านไม่ออกของจีน AJAX
1. EncodeURI บนฝั่งไคลเอ็นต์ (ไม่จำเป็นต้องทำ utf-8 ซึ่งเป็นค่าเริ่มต้น) และแปลงการเข้ารหัส iso-8859-1 เป็นการเข้ารหัส utf-8 บนฝั่งเซิร์ฟเวอร์
2. EncodeURI ดำเนินการสองครั้งบนฝั่งไคลเอ็นต์และแปลงหนึ่งครั้งบนฝั่งเซิร์ฟเวอร์
สาเหตุที่วิธีที่สองสามารถแก้ปัญหาได้:
หลังจากการแปลงสองครั้ง ให้ทำการถอดรหัสครั้งแรกในวิธี getparameter แรก เนื่องจากวิธีแก้ปัญหาเป็นภาษาอังกฤษ (ผลลัพธ์หลังจากการเข้ารหัสครั้งแรก) จะไม่มีปัญหา ในครั้งที่สองให้ใช้วิธีถอดรหัสของ URLDecoder ดังนั้นปัญหานี้สามารถทำได้ สามารถแก้ไขได้ตามปกติ ควรสังเกตว่าต้องระบุรูปแบบการถอดรหัสเป็น "utf-8" ในวิธีการถอดรหัส แพลตฟอร์มจีนหลายแห่งไม่ได้ใช้ utf-8 (ฉันเดาว่ามันคือ gb2312) ดังนั้นการแปลงการถอดรหัสเริ่มต้นจึงไม่จำเป็นต้องใช้ utf-8
สาเหตุที่ไคลเอ็นต์ถูกเข้ารหัสสองครั้งและถอดรหัสเพียงครั้งเดียวบนเซิร์ฟเวอร์ก็เนื่องมาจาก Tomcat เพื่อให้การเขียนโปรแกรมสะดวกสำหรับโปรแกรมเมอร์ (รับและโพสต์โดยใช้รหัสเดียวกัน) Tomcat จะถอดรหัสการเข้ารหัสของโพสต์โดยอัตโนมัติ ดังนั้นจึงมีคำสั่งถอดรหัสที่เขียนด้วยลายมือน้อยกว่าหนึ่งคำสั่งบนฝั่งเซิร์ฟเวอร์ เหตุผลที่เราต้องทำการเข้ารหัสและถอดรหัสอีกครั้งก็เนื่องมาจากการถอดรหัสอัตโนมัติของ Tomcat ไม่จำเป็นต้องถอดรหัสตามการเข้ารหัสที่เราต้องการ แต่รหัสที่ถอดรหัสเป็นภาษาอังกฤษและอักขระอื่น ๆ จะเหมือนกันไม่ว่าจะอยู่บนแพลตฟอร์มใดก็ตาม ดังนั้น Tomcat จึงสามารถตีความผลลัพธ์ของการเข้ารหัสครั้งแรกโดยอัตโนมัติ จากนั้นจึงตีความโค้ด encodeURI ด้วยตนเองหนึ่งครั้งเพื่อให้ได้รูปแบบที่คุณต้องการ
ภาคผนวก: ตอนนี้ฉันได้สังเกตพฤติกรรมของเบราว์เซอร์อีกครั้ง และฉันรู้สึกว่ามันไม่ใช่ความผิดของ Tomcat เพราะภาษาจีนที่แสดงในเบราว์เซอร์ไม่ใช่เนื้อหาที่เข้ารหัส ขณะนี้ฉันสับสนเกี่ยวกับปัญหาการเข้ารหัสเหล่านี้ รู้อย่างนี้แล้ว เพื่อนๆ ผู้มีความรู้ด้านนี้ยินดีให้คำปรึกษาครับ!
แก้ไขปัญหาแคช IE
เพิ่มการประทับเวลาและต้องการตรวจสอบหรือไม่?
แก้ไขปัญหาพร็อกซี
ต้องการ? แปลงเป็น $
รหัสตัวอย่าง:
คัดลอกรหัสรหัสดังต่อไปนี้:
ตรวจสอบฟังก์ชัน () {
//วิธีที่ 1 เพื่อแก้ปัญหาการอ่านไม่ออกของจีน ข้อมูลที่ส่งจากฝั่งเพจจะถูกเข้ารหัสเป็น encodeURI และเซกเมนต์เซิร์ฟเวอร์ใช้ new String(old.getBytes("iso8859-1"),"UTF-8");
//วิธีที่ 2 ในการแก้ปัญหาการอ่านไม่ออกของจีน ข้อมูลที่ส่งจากฝั่งหน้าจะถูกเข้ารหัสสองครั้ง และส่วนเซิร์ฟเวอร์ใช้ URLDecoder.decode(เก่า, "UTF-8")
var url = "AJAXServer?name=" + encodeURI(encodeURI($("#ชื่อผู้ใช้").val()));
url = แปลง URL(url);
$.get(url,null,function(ข้อมูล){
$("#result").html(ข้อมูล);
-
-
//เพิ่มการประทับเวลาไปยังที่อยู่ URL เพื่อหลอกเบราว์เซอร์และไม่อ่านแคช
ฟังก์ชั่น ConvertURL (URL) {
//รับการประทับเวลา
var timstamp = (วันที่ใหม่()).valueOf();
//ประกบข้อมูลการประทับเวลาลงใน url
//url = "AJAXเซิร์ฟเวอร์"
ถ้า (url.indexOf("?") >= 0) {
url = url + "&t=" + ประทับเวลา;
} อื่น {
url = url + "?t=" + ประทับเวลา;
-
URL ส่งคืน;
-