โดยปกติ หลังจากใช้ Java เพื่อจัดทำแพ็กเกจไฟล์และสร้างไฟล์บีบอัด อักขระที่อ่านไม่ออกจะปรากฏขึ้นในสองตำแหน่งต่อไปนี้:
1. ปัญหาเนื้อหาที่อ่านไม่ออกของจีน ผู้คนจำนวนมากบนอินเทอร์เน็ตได้ให้วิธีแก้ปัญหานี้ มีสองวิธีหลัก: วิธีหนึ่งคือการแก้ไขซอร์สโค้ดของ sun; อีกวิธีหนึ่งคือการใช้ไลบรารีคลาสโอเพ่นซอร์ส org.apache .tools.zip.ZipOutputStream และ org.apache.tools.zip.ZipEntry ทั้งสองคลาสนี้รวมอยู่ใน ant.jar และสามารถดาวน์โหลดและใช้งานได้โดยตรง ไม่ต้องสงสัยเลยว่าการเลือกอย่างหลังจะสะดวกกว่า
2. ปัญหาอักขระภาษาจีนที่อ่านไม่ออกในความคิดเห็นเกี่ยวกับไฟล์บีบอัด: zos.setComment("การทดสอบภาษาจีน"); มีข้อมูลน้อยเกี่ยวกับวิธีการแก้ไขปัญหานี้ทางออนไลน์ ไม่มีปัญหากับคลาสทดสอบที่สร้างโดยโปรเจ็กต์บนเครื่องของฉันเอง แต่เมื่อใช้ในโปรเจ็กต์ของบริษัท ตัวอักษรที่อ่านไม่ออกยังคงปรากฏอยู่ โดยใช้วิธีการตั้งค่าการเข้ารหัส (zos.setEncoding("gbk");) ในที่สุดฉันก็พบปัญหาในโครงการทดสอบ วิธีการเข้ารหัสคือ gbk และการเข้ารหัสเริ่มต้นของโครงการของบริษัทคือ utf-8 ดังนั้นจึงไม่มีปัญหากับโครงการทดสอบ แต่มีปัญหากับโครงการของบริษัท
org.apache.tools.zip.ZipOutputStream ใช้วิธีการเข้ารหัสของโครงการตามค่าเริ่มต้น ในทางทฤษฎี utf-8 ยังรองรับภาษาจีนด้วย ฉันไม่เข้าใจจริงๆ ว่าทำไมมันถึงยังอ่านไม่ออก คุณสามารถแก้ไขได้โดยการเปลี่ยน setEncoding วิธีการ gbk
รหัสตัวอย่างสำหรับปัญหาข้างต้นเป็นดังนี้:
แพ็คเกจ com.compress; นำเข้า java.io.BufferedInputStream; นำเข้า java.io.BufferedOutputStream; นำเข้า java.io.DataInputStream; นำเข้า java.io.File; นำเข้า java.io.FileInputStream; นำเข้า java.io.FileOutputStream; นำเข้า org apache.tools.zip.ZipEntry;นำเข้า org.apache.tools.zip.ZipOutputStream; CompressEncodingTest คลาสสาธารณะ { /** * @param args * @throws Exception */ public static void main(String[] args) ส่งข้อยกเว้น { File f = new File("Thai test. txt"); ZipOutputStream zos = ZipOutputStream ใหม่ (ใหม่ BufferedOutputStream ( ใหม่ FileOutputStream("zipTest.zip"), 1024)); zos.putNextEntry(ใหม่ ZipEntry("Thai.txt")); DataInputStream dis = new DataInputStream(new BufferedInputStream( new FileInputStream(f))); ZipEntry(f.getName())); ในขณะที่ ((c = dis.read()) != -1) { zos.write(c); } zos.setEncoding("gbk"); zos.setComment("การทดสอบภาษาจีน"); ; }}