เมื่อปรับใช้โปรแกรมบริการเว็บวันนี้ เซิร์ฟเล็ตที่ได้รับข้อมูลจากเพจพบปัญหาที่อ่านไม่ออก ในเซิร์ฟเล็ต ฉันได้เพิ่มข้อความ request.setCharacterEncoding("GB2312"); ลงในโค้ด แต่ยังคงเกิดปัญหาที่อ่านไม่ออก
ค้นหาข้อมูลออนไลน์ดังต่อไปนี้: JAVA คือการเข้ารหัส Unicode ขั้นแรกให้คุณแปลงเป็น ISO8859-1 แล้วแปลงเป็น GBK หรือ GB2312
รหัสจาวา
นี่คือภาษาจีน!
มีวิธีที่ง่ายกว่าคือตั้งค่าการแปลงการเข้ารหัสในเซิร์ฟเวอร์โดยตรง ใช้ TOMCAT5.0.28
ค้นหาไฟล์ SERVER.XML ในไดเร็กทอรี ../Tomcat 5.0/conf เปิดด้วย WordPad และตั้งค่าดังนี้:
เพียงเพิ่มแอตทริบิวต์ภายใน URIEncoding="GBK"
ผ่านการทดสอบแล้ว ประโยค request.setCharacterEncoding("GB2312") มีบทบาทอะไรบ้าง
(1) หน้า JSP เป็นภาษาจีน แต่เมื่อดูแล้วจะอ่านไม่ออก:
วิธีแก้ไขคือการเข้ารหัสเพจ JSP เนื่องจากปัญหาการเข้ารหัสเมื่อ JSP ถูกแปลงเป็นไฟล์ Java เซิร์ฟเวอร์บางตัวจึงใช้ ISO-8859-1 เป็นค่าเริ่มต้น หากป้อนภาษาจีนลงใน JSP โดยตรง JSP จะถือว่าเป็น ISO8859 1 เป็นปัญหาอย่างแน่นอน เราสามารถยืนยันสิ่งนี้ได้โดยดูที่ไฟล์ระดับกลาง Java ที่สร้างโดย Jasper
(2) เมื่อใช้วัตถุ Request เพื่อรับรหัสตัวอักษรจีนที่ลูกค้าส่งมา ตัวอักษรที่อ่านไม่ออกจะปรากฏขึ้น:
วิธีแก้ไขคือการกำหนดค่าตัวกรองซึ่งเป็นตัวกรอง Servelet โดยมีโค้ดดังนี้:
request.setCharacterEncoding("GBK");
// ส่งการควบคุมไปยังตัวกรองถัดไป
chain.doFilter (คำขอ, ตอบกลับ);
-
<การแมปตัวกรอง</การแมปตัวกรอง>
<filter-name></filter-name>ตั้งค่าการเข้ารหัสอักขระ
<url-รูปแบบ></url-รูปแบบ>/*
นอกจากนี้ยังมีการประมวลผลข้อมูลที่มีตัวอักษรจีนด้วย รหัสการประมวลผลคือ:
วิธีแก้ไขคือ:
1) เปิดไฟล์ server.xml ของ Tomcat ค้นหาบล็อก และเพิ่มบรรทัดต่อไปนี้:
URIEncoding=”GBK”
ที่สมบูรณ์ควรเป็นดังนี้:
(4) มีตัวอักษรจีนบนหน้า JSP และตัวอักษรจีนบนปุ่ม แต่เมื่อดูหน้าผ่านเซิร์ฟเวอร์ ตัวอักษรที่อ่านไม่ออกจะปรากฏขึ้น:
วิธีแก้ไขคือ: ประการแรก ข้อความที่แปลแล้วไม่ควรรวมไว้ในไฟล์ JSP โดยตรง แต่ควรได้รับข้อความจาก Resource Bundle ผ่านแท็ก <bean:message> คุณควรใส่ข้อความภาษาจีนของคุณในไฟล์ Application.properties ไฟล์นี้อยู่ใต้ WEB-INF/classes/* ตัวอย่างเช่น หากฉันมีป้ายกำกับสองรายการสำหรับชื่อและอายุบนเพจ ฉันจะต้องสร้างแอปพลิเคชันก่อน คุณสมบัติ เนื้อหาภายในควรเป็น name="name" age="age" จากนั้นฉันวางไฟล์นี้ไว้ใต้ WEB-INF/classes/properties/ จากนั้นเข้ารหัสตามไฟล์ Application.properties เพื่อสร้างไฟล์ Chinese Resource สมมติว่าชื่อคือ Application_cn.properties คำสั่ง Native2ascii มีอยู่ใน JDK ซึ่งสามารถรับรู้การแปลงการเข้ารหัสอักขระได้ ค้นหาไดเร็กทอรีที่คุณวางไฟล์ Application.properties ไว้ในสภาพแวดล้อม DOS ดำเนินการคำสั่งในสภาพแวดล้อม DOS ไฟล์ทรัพยากรภาษาจีน Application_cn.properties ที่เข้ารหัสใน GBK จะถูกสร้างขึ้น: Native2ascii ?encoding gbk Application.properties Application_cn.properties คำสั่งข้างต้น ในอนาคต ไฟล์ Application_cn.properties ที่มีเนื้อหาต่อไปนี้จะถูกสร้างขึ้น: name=u59d3u540d age=u5e74u9f84 กำหนดค่าใน Struts-config.xml: <message-resources parameter="properties.Application_cn"></ ทรัพยากรข้อความ> ณ จุดนี้ โดยทั่วไปแล้วเกินครึ่งแล้ว คุณต้องเขียนบนหน้า JSP สำหรับป้ายกำกับชื่อ คุณต้องเขียน <bean:message key=""name""> สิ่งนี้จะปรากฏขึ้น บนหน้าชื่อภาษาจีนจะปรากฏขึ้นตามอายุและตัวอักษรจีนบนปุ่มก็จะถูกประมวลผลในลักษณะเดียวกัน
(5) รหัสที่เขียนลงฐานข้อมูลอ่านไม่ออก:
วิธีแก้ไข: กำหนดค่าตัวกรองซึ่งเป็นตัวกรอง Servelet รหัสจะเหมือนกับครั้งที่สอง
หากคุณเชื่อมต่อโดยตรงกับฐานข้อมูลผ่าน JDBC โค้ดการกำหนดค่าจะเป็นดังนี้: jdbc:mysql://localhost:3306/workshopdb? useUnicode=true&CharacterEncoding=GBK เพื่อให้แน่ใจว่าโค้ดในฐานข้อมูลจะไม่อ่านไม่ออก
หากคุณกำลังลิงก์ผ่านแหล่งข้อมูล คุณจะไม่สามารถเขียนได้เช่นนี้ ขั้นแรก คุณต้องเขียนลงในไฟล์การกำหนดค่า ตำแหน่งในการกำหนดค่าแหล่งข้อมูลใน Tomcat 5.0.19 อยู่ภายใต้ C:Tomcat 5.0confCatalinalocalhost ที่ฉันสร้างขึ้น โปรเจ็กต์นี้เป็นเวิร์กช็อป และไดเร็กทอรีที่วางไว้อยู่ภายใต้ webapp ไฟล์การกำหนดค่าของ Workshop.xml เป็นดังนี้:
<ชื่อทรัพยากร = "jdbc/WorkshopDB"></resource>auth = "คอนเทนเนอร์"
type="javax.sql.DataSource" />
<resourceparams name="jdbc/WorkshopDB"></resourceparams>
<พารามิเตอร์></พารามิเตอร์>
<ชื่อ></ชื่อ>โรงงาน
<value></value>org.apache.commons.dbcp.BasicDataSourceFactory
<พารามิเตอร์></พารามิเตอร์>
<ชื่อ></ชื่อ>maxActive
<ค่า></ค่า>100
<พารามิเตอร์></พารามิเตอร์>
<ชื่อ></ชื่อ>maxIdle
<ค่า></ค่า>30
<พารามิเตอร์></พารามิเตอร์>
<ชื่อ></ชื่อ>maxWait
<ค่า></ค่า>10,000
<พารามิเตอร์></พารามิเตอร์>
<ชื่อ></ชื่อ>ชื่อผู้ใช้
<ค่า></ค่า>ราก
<พารามิเตอร์></พารามิเตอร์>
<ชื่อ></ชื่อ>รหัสผ่าน
<ค่า></ค่า>
<พารามิเตอร์></พารามิเตอร์>
<ชื่อ></ชื่อ>driverClassName
<value></value>com.mysql.jdbc.ไดร์เวอร์
<พารามิเตอร์></พารามิเตอร์>
<ชื่อ></ชื่อ>URL
<ค่า></ค่า>
ให้ความสนใจเป็นพิเศษกับตำแหน่งที่เป็นตัวหนา ซึ่งจะแตกต่างจากลิงก์โดยตรงไปยัง JDBC หากคุณกำหนดค่าอย่างถูกต้อง เมื่อคุณป้อนภาษาจีน จะเป็นภาษาจีนในฐานข้อมูล สิ่งหนึ่งที่ควรทราบคือเมื่อคุณแสดงหน้าข้อมูล ต้องการโค้ดบรรทัดนี้ด้วย ควรสังเกตว่าพนักงานต้อนรับบางคนใช้ Dreamver ในการเขียนโค้ด พวกเขาเปลี่ยนเป็น jsp มีสิ่งหนึ่งที่ต้องใส่ใจและนั่นคือการส่ง Action ใน Dreamver และคุณต้องส่งไป เนื่องจากการส่ง JSP มีสองวิธี: POST และ GET แต่โค้ดที่ส่งโดยทั้งสองวิธีนี้ยังคงแตกต่างกันมากในแง่ของการเข้ารหัส ซึ่งจะอธิบายในภายหลัง </บีน:ข้อความ>< /บีน:ข้อความ>