Normalmente, depois de usar Java para empacotar arquivos e gerar arquivos compactados, caracteres ilegíveis aparecerão nos dois locais a seguir:
1. O problema do conteúdo distorcido em chinês Muitas pessoas na Internet deram soluções para esse problema. Existem dois métodos principais: um é modificar o código-fonte do sun e o outro é usar a biblioteca de classes de código aberto org.apache. .tools.zip.ZipOutputStream e org.apache.tools.zip.ZipEntry, essas duas classes estão incluídas no ant.jar e podem ser baixadas e usadas diretamente. Não há dúvida de que é mais conveniente escolher a última.
2. O problema dos caracteres chineses distorcidos nos comentários de arquivos compactados: zos.setComment("Teste chinês"); há menos informações sobre a solução para esse problema online. Não houve problemas com as classes de teste criadas pelo projeto em minha própria máquina, mas quando utilizadas nos projetos da empresa continuaram aparecendo caracteres ilegíveis. Ao utilizar o método de configuração da codificação (zos.setEncoding("gbk");), Finalmente encontrei o problema no projeto de teste. O método de codificação é gbk e a codificação padrão do projeto da empresa é utf-8, portanto não há problema com o projeto de teste, mas há um problema com o projeto da empresa.
org.apache.tools.zip.ZipOutputStream usa o método de codificação do projeto por padrão. Teoricamente falando, utf-8 também suporta chinês. Eu realmente não consigo entender por que ainda está distorcido. método para gbk.
O código de exemplo para o problema acima é o seguinte:
pacote 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 { Arquivo f = new Arquivo("Teste chinês. txt"); ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream( novo FileOutputStream("zipTest.zip"), 1024)); zos.putNextEntry(new ZipEntry("Chinese.txt")); ZipEntry(f.getNome())); dis.read()) != -1) { zos.write(c } zos.setEncoding("gbk"); ;}}