Biasanya, setelah menggunakan Java untuk mengemas file dan menghasilkan file terkompresi, karakter kacau akan muncul di dua tempat berikut:
1. Masalah konten berbahasa Mandarin. Banyak orang di Internet telah memberikan solusi untuk masalah ini. Ada dua metode utama: satu adalah dengan memodifikasi kode sumber sun; yang lainnya adalah dengan menggunakan perpustakaan kelas open source org.apache .tools.zip.ZipOutputStream dan org.apache.tools.zip.ZipEntry, kedua kelas ini termasuk dalam ant.jar dan dapat diunduh dan digunakan secara langsung. Tidak ada keraguan bahwa akan lebih mudah untuk memilih yang terakhir.
2. Masalah karakter Cina yang kacau dalam komentar file terkompresi: zos.setComment("Tes Cina"); ada sedikit informasi tentang solusi untuk masalah ini secara online. Tidak ada masalah dengan kelas pengujian yang dibuat oleh proyek di mesin saya sendiri, tetapi ketika digunakan dalam proyek perusahaan, karakter yang kacau terus muncul. Dengan menggunakan metode pengaturan pengkodean (zos.setEncoding("gbk");), Saya akhirnya menemukan masalah di proyek pengujian. Metode pengkodeannya adalah gbk, dan pengkodean default proyek perusahaan adalah utf-8, jadi tidak ada masalah dengan proyek pengujian tetapi ada masalah dengan proyek perusahaan.
org.apache.tools.zip.ZipOutputStream menggunakan metode pengkodean proyek secara default. Secara teori, utf-8 juga mendukung bahasa Mandarin. Saya benar-benar tidak mengerti mengapa ini masih kacau metode ke gbk.
Contoh kode untuk soal di atas adalah sebagai berikut:
paket com.compress;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import org. apache.tools.zip.ZipEntry;impor org.apache.tools.zip.ZipOutputStream; public class CompressEncodingTest { /** * @param args * @throws Exception */ public static void main(String[] args) melempar Pengecualian { File f = new File("Tes Cina. txt"); ZipOutputStream zos = ZipOutputStream baru(BufferedOutputStream baru( baru FileOutputStream("zipTest.zip"), 1024)); zos.putNextEntry(ZipEntry baru("Chinese.txt")); DataInputStream dis = new DataInputStream(new BufferedInputStream( new FileInputStream(f))); ZipEntry(f.getName())); int c; dis.read()) != -1) { zos.write(c); } zos.setEncoding("gbk"); zos.setComment("Tes Cina"); ;