Habituellement, après avoir utilisé Java pour empaqueter des fichiers et générer des fichiers compressés, des caractères tronqués apparaissent aux deux endroits suivants :
1. Le problème du contenu tronqué en chinois. De nombreuses personnes sur Internet ont proposé des solutions à ce problème. Il existe deux méthodes principales : l'une consiste à modifier le code source de Sun et l'autre à utiliser la bibliothèque de classes open source org.apache. .tools.zip.ZipOutputStream et org.apache.tools.zip.ZipEntry, ces deux classes sont incluses dans ant.jar et peuvent être téléchargées et utilisées directement. Il ne fait aucun doute qu'il est plus pratique de choisir cette dernière.
2. Le problème des caractères chinois tronqués dans les commentaires des fichiers compressés : zos.setComment("Chinese test"); il y a moins d'informations sur la solution à ce problème en ligne. Il n'y a eu aucun problème avec les classes de test créées par le projet sur ma propre machine, mais lorsqu'elles étaient utilisées dans les projets de l'entreprise, des caractères tronqués continuaient d'apparaître en utilisant la méthode de définition de l'encodage (zos.setEncoding("gbk");), J'ai finalement trouvé le problème dans le projet de test. La méthode d'encodage est gbk et l'encodage par défaut du projet de l'entreprise est utf-8, donc il n'y a pas de problème avec le projet de test mais il y a un problème avec le projet de l'entreprise.
org.apache.tools.zip.ZipOutputStream utilise la méthode d'encodage du projet par défaut. Théoriquement, utf-8 prend également en charge le chinois. Je n'arrive vraiment pas à comprendre pourquoi il est toujours tronqué. Vous pouvez le résoudre en modifiant setEncoding. méthode pour gbk.
L'exemple de code pour le problème ci-dessus est le suivant :
package com.compress; importer java.io.BufferedInputStream; importer java.io.BufferedOutputStream; importer java.io.DataInputStream; importer java.io.File; importer java.io.FileInputStream; importer java.io.FileOutputStream; importer org. apache.tools.zip.ZipEntry;importation org.apache.tools.zip.ZipOutputStream; public class CompressEncodingTest { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { File f = new File("Test chinois. txt"); ZipOutputStream zos = nouveau ZipOutputStream(nouveau BufferedOutputStream( nouveau 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("Test chinois"); ; }}