Por lo general, después de usar Java para empaquetar archivos y generar archivos comprimidos, aparecerán caracteres confusos en los dos lugares siguientes:
1. El problema del contenido confuso en chino. Muchas personas en Internet han dado soluciones a este problema. Hay dos métodos principales: uno es modificar el código fuente de Sun y el otro es utilizar la biblioteca de clases de código abierto org.apache. .tools.zip.ZipOutputStream y org.apache.tools.zip.ZipEntry, estas dos clases están incluidas en ant.jar y se pueden descargar y usar directamente. No hay duda de que es más conveniente elegir esta última.
2. El problema de los caracteres chinos confusos en los comentarios de archivos comprimidos: zos.setComment("Prueba china"); hay menos información en línea sobre la solución a este problema. No hubo problemas con las clases de prueba creadas por el proyecto en mi propia máquina, pero cuando se usaron en los proyectos de la compañía, siguieron apareciendo caracteres confusos al usar el método de configuración de codificación (zos.setEncoding("gbk");), Finalmente encontré el problema en el proyecto de prueba. El método de codificación es gbk y la codificación predeterminada del proyecto de la empresa es utf-8, por lo que no hay ningún problema con el proyecto de prueba pero sí con el proyecto de la empresa.
org.apache.tools.zip.ZipOutputStream usa el método de codificación del proyecto de forma predeterminada. En teoría, utf-8 también admite chino. Realmente no puedo entender por qué todavía está confuso. Puedes resolverlo cambiando setEncoding. método para gbk.
El código de muestra para el problema anterior es el siguiente:
paquete com.compress;importar java.io.BufferedInputStream;importar java.io.BufferedOutputStream;importar java.io.DataInputStream;importar java.io.File;importar java.io.FileInputStream;importar java.io.FileOutputStream;importar org. apache.tools.zip.ZipEntry;importar org.apache.tools.zip.ZipOutputStream; public class CompressEncodingTest { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { File f = new File("Prueba china. txt"); ZipOutputStream zos = nuevo ZipOutputStream(nuevo BufferedOutputStream( nuevo FileOutputStream("zipTest.zip"), 1024)); zos.putNextEntry(new ZipEntry("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("Prueba china"); ; }}