ต่อไปนี้เป็นวิธีแก้ปัญหาที่แตกต่างกัน 4 แบบสำหรับอักขระที่อ่านไม่ออก ซึ่งโดยทั่วไปจะครอบคลุมถึงสถานการณ์ต่างๆ ที่อักขระที่อ่านไม่ออกปรากฏขึ้นในการพัฒนาเว็บ
โซลูชันโค้ดที่อ่านไม่ออกส่วนใหญ่จะเสนอสำหรับสภาพแวดล้อมการพัฒนา java+mysql ตราบใดที่มีการแก้ไขที่สอดคล้องกัน ก็สามารถใช้เพื่อแก้ปัญหาโค้ดที่อ่านไม่ออกในสภาพแวดล้อมภาษาต่างๆ
1. หน้า JSP แสดงอักขระที่อ่านไม่ออก
หน้าที่แสดงต่อไปนี้ (display.jsp) ปรากฏเป็น
รหัสโปรแกรม
<html>
<หัว>
<title>การประมวลผล JSP ของจีน</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</หัว>
<ร่างกาย>
-
out.print("การประมวลผลภาษาจีน JSP");
-
</ร่างกาย>
</html>
สำหรับเว็บเซิร์ฟเวอร์ที่แตกต่างกันและเวอร์ชัน JDK ที่แตกต่างกัน ผลการประมวลผลจะแตกต่างกัน เหตุผล: วิธีการเข้ารหัสที่เซิร์ฟเวอร์ใช้นั้นแตกต่างกัน และเบราว์เซอร์จะแสดงผลลัพธ์ที่แตกต่างกันสำหรับอักขระที่ต่างกัน วิธีแก้ไข: ระบุวิธีการเข้ารหัส (gb2312) ในเพจ JSP นั่นคือ เพิ่ม: <%@ page contentType="text/html; charset=gb2312"%> ไปยังบรรทัดแรกของเพจเพื่อกำจัดอักขระที่อ่านไม่ออก หน้าเต็มมีดังนี้:
<%@ หน้า contentType="text/html; charset=gb2312"%>
<html>
<หัว>
<title>การประมวลผล JSP ของจีน</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</หัว>
<ร่างกาย>
-
out.print("การประมวลผลภาษาจีน JSP");
-
</ร่างกาย>
</html>
2. อักขระที่อ่านไม่ออกปรากฏขึ้นเมื่อส่งแบบฟอร์มเป็นภาษาจีน ด้านล่างนี้คือหน้าการส่ง (submit.jsp) พร้อมด้วยรหัสต่อไปนี้:
รหัสโปรแกรม
<html>
<หัว>
<title>การประมวลผล JSP ของจีน</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</หัว>
<ร่างกาย>
<ชื่อแบบฟอร์ม = "form1" method = "โพสต์" action = "process.jsp">
<div align="center">
<ประเภทอินพุต = "ข้อความ" ชื่อ = "ชื่อ">
<input type="submit" name="Submit" value="Submit">
</div>
</แบบฟอร์ม>
</ร่างกาย>
</html>
ต่อไปนี้เป็นรหัสหน้าการประมวลผล (process.jsp):
รหัสโปรแกรม
<%@ หน้า contentType="text/html; charset=gb2312"%>
<html>
<หัว>
<title>การประมวลผล JSP ของจีน</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</หัว>
<ร่างกาย>
<%=request.getParameter("ชื่อ")%>
</ร่างกาย>
</html>
หากสามารถแสดงอักขระภาษาอังกฤษที่ส่งใน send.jsp ได้อย่างถูกต้อง หากส่งอักขระจีน อักขระที่อ่านไม่ออกจะปรากฏขึ้น เหตุผล: เบราว์เซอร์ใช้การเข้ารหัส UTF-8 เป็นค่าเริ่มต้นเพื่อส่งคำขอ และวิธีการเข้ารหัส UTF-8 และ GB2312 แสดงถึงอักขระที่แตกต่างกัน ดังนั้นจึงไม่สามารถจดจำอักขระได้ วิธีแก้ไข: เข้ารหัสคำขออย่างสม่ำเสมอผ่าน request.seCharacterEncoding("gb2312") เพื่อให้ได้การแสดงภาษาจีนตามปกติ รหัส process.jsp ที่แก้ไขจะเป็นดังนี้:
รหัสโปรแกรม
<%@ หน้า contentType="text/html; charset=gb2312"%>
-
request.seCharacterEncoding("gb2312");
-
<html>
<หัว>
<title>การประมวลผล JSP ของจีน</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</หัว>
<ร่างกาย>
<%=request.getParameter("ชื่อ")%>
</ร่างกาย>
</html>
3. การเชื่อมต่อฐานข้อมูลอ่านไม่ออก
ตราบใดที่ทุกอย่างที่เกี่ยวข้องกับภาษาจีนอ่านไม่ออก วิธีแก้ไขคือเพิ่ม useUnicode=true&CharacterEncoding=GBK ลงใน URL ฐานข้อมูลของฐานข้อมูลและจะไม่เป็นไร
4. การแสดงฐานข้อมูลอ่านไม่ออก
ใน mysql4.1.0 อักขระภาษาจีนที่อ่านไม่ออกจะปรากฏในประเภท varchar และประเภทข้อความ สำหรับประเภท varchar การตั้งค่าเป็นแอตทริบิวต์ไบนารี่สามารถแก้ปัญหาภาษาจีนได้ สำหรับประเภทข้อความ ต้องใช้คลาสการแปลงการเข้ารหัสเพื่อจัดการ การดำเนินการมีดังนี้:
รหัสโปรแกรม
คลาสสาธารณะ แปลง {
/** แปลงรหัส ISO-8859-1 เป็น GB2312
-
สาธารณะสตริงคงที่ ISOtoGB (สตริง iso) {
สตริง gb;
พยายาม{
ถ้า (iso.equals ("") || iso == null) {
กลับ "";
-
อื่น{
iso = iso.ตัดแต่ง();
gb = สตริงใหม่ (iso.getBytes("ISO-8859-1"),"GB2312");
กลับกิกะไบต์;
-
-
จับ (ข้อยกเว้น e) {
System.err.print("ข้อผิดพลาดในการแปลงการเข้ารหัส:"+e.getMessage());
กลับ "";
-
-
-
คอมไพล์ลงในคลาส และคุณสามารถเรียกใช้เมธอดคงที่ ISOtoGB() ของคลาส Convert เพื่อแปลงการเข้ารหัสได้