เมื่อเพื่อนร่วมงานพบปัญหาการเข้ารหัสเขาต้องการสร้างตัวกรองการเข้ารหัสตัวละครที่แก้ปัญหาทั้งหมด คลาสตัวกรองและการกำหนดค่ามีดังนี้:
คลาสตัวกรอง:
<span style = "ตัวอักษรขนาด: 12px;"> แพ็คเกจ com.chaoxing.newspaper.web.filter; นำเข้า java.io.ioexception; นำเข้า java.lang.reflect.invocationhandler; นำเข้า java.lang.reflect.method; javax.servlet.filterchain; นำเข้า javax.servlet.filterconfig; นำเข้า Javax.servlet.servletexception; นำเข้า Javax.servlet.servletrequest; นำเข้า Javax.servlet.servletResponse; javax.servlet.http.httpservletResponse; ตัวละครระดับสาธารณะการใช้งานตัวกรอง {โมฆะสาธารณะ dofilter (servletrequest req, servletresponse res, chain filterchain) โยน ioexception, servletexception {system.out.println ( คำขอ httpservletrequest สุดท้าย = (httpservletrequest) req; httpservletResponse response = (httpservletResponse) res; // แก้ไขคำขอรหัสภาษาจีนที่อ่านไม่ออก Setcharacterencoding ("UTF-8"); Response.Setcharacterencoding ("UTF-8"); Response.setContentType ("ข้อความ/html; charset = utf-8"); chain.dofilter ((servletrequest) proxy.newproxyinstance (this.getclass (). getclassloader (), request.getClass (). getInterfaces (), rechocationHandler ใหม่ () {@@@overridepublic Object if (methodName.equals ("getParameter") {// ดำเนินการตามคำขอ GetParameter เพื่อรับค่าสตริงผลลัพธ์ = (สตริง) เมธอด invoke (คำขอ, args); System.out.println (ค่า+"|||||"); res);} public void init (filterconfig fconfig) พ่น servletexception {system.out.println ("การเริ่มต้นตัวกรอง");}@overridepublic void destroy () {system.out.println ("กรองเสร็จสมบูรณ์");การกำหนดค่าตัวกรอง:
<span style = "ตัวอักษรขนาด: 12px;"> <!-แก้ปัญหาตัวกรองที่อ่านไม่ออกทั้งในไซต์-> <filter> <stilter-name> ตัวละคร </filter-name> <tilter-class> com.xxx.web.filter.characterencodfilter <url-pattern>/*</url-pattern> </ตัวกรอง-แมปการ> </span>
อย่างไรก็ตามเมื่อแบบฟอร์มส่วนหน้าส่งวิธีการได้รับสิ่งที่คุณได้รับยังคงอ่านไม่ออก
ในตอนแรกฉันสับสนว่าตัวกรองถูกเขียนไม่ถูกต้องหรือไม่และชุดการเข้ารหัสถูกเขียนไม่ถูกต้องหรือไม่ อย่างไรก็ตามหลังจากการทดสอบไม่มีอะไรผิดปกติ ตัวกรองทำงานตามปกติ
ในที่สุดเปลี่ยน value.getByte ("ISO-8859-1", "UTF-8") เป็น value.getByte ("UTF-8", "UTF-8") และรับค่าในพื้นหลังซึ่งไม่ได้อ่านออกมาอีกต่อไป ในที่สุด Baidu ก็ไป
มีการกล่าวกันว่าชุดการเข้ารหัสเริ่มต้นของ TomCat8 คือ UTF-8 และชุดการเข้ารหัสเริ่มต้นของ Tomcat8 ก่อนหน้านี้คือ ISO-8859-1 และฉันก็รู้ทันที ...
สรุป: ชุดการเข้ารหัสเริ่มต้นก่อน TOMCAT7 และเวอร์ชันของมันคือ ISO-8859-1 และชุดอักขระเริ่มต้นของ TOMCAT8 นั้นเป็น UTF-8 อยู่แล้วดังนั้นจึงไม่จำเป็นต้องแปลงรหัสผลลัพธ์ของการร้องขอ GetParameter () อีกต่อไปและไม่จำเป็นต้องเข้ารหัสคลาสตัวกรองการเข้ารหัส
การแก้ปัญหาของการเข้ารหัสตัวกรองตัวกรองที่ไม่ถูกต้องการเข้ารหัสอักขระที่ใช้ TOMCAT8 เป็นเนื้อหาทั้งหมดที่ใช้ร่วมกันโดยตัวแก้ไข ฉันหวังว่ามันจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น