Maison > Java > JavaBase > le corps du texte

Introduction aux causes et aux solutions des caractères tronqués dans la compression zip Java

Libérer: 2019-12-02 13:20:03
original
3387 Les gens l'ont consulté

Introduction aux causes et aux solutions des caractères tronqués dans la compression zip Java

Causes et solutions à la compression zip Java tronquée : (Recommandé : Tutoriel vidéo Java)

Environnement d'exécution

Jdk 1.5 , win 7 version chinoise

JDK1.5 possède une API liée à la compression zip, qui se trouve sous le package java.util.zip. Dans des circonstances normales, utilisez l'API fournie avec le JDK pour compresser le répertoire (fichier) dans un package zip. Les étapes sont les suivantes :

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(file));
Out.putNextEntry(new ZipEntry(entryName));
//If entry is directory
//above codes are enough
//else if entry is file
//then the codes below is needed
FileInputStream in = new FileInputStream(infile);
byte[] bs = newbyte[1024];
int b = 0;
while((b = in.read(bs)) != -1) {
zos.write(bs, 0, b);
}
in.close();
Copier après la connexion

Si le nom du répertoire ou le nom du fichier à empaqueter contient des caractères chinois. , les noms de ces répertoires ou fichiers apparaîtront avec des caractères tronqués. La raison est que dans l'API fournie avec le JDK, lors de l'écriture de ZipEntry, l'encodage par défaut utilisé est UTF8 (il semble qu'il n'y ait que celui-ci, et il n'y en a pas). façon de le changer. On dit que Java7 s'est amélioré), et le fonctionnement de win7. La version chinoise du système utilise le codage GBK lors du traitement des fichiers zip. Les processus de codage et de décodage sont différents, ce qui entraîne une déformation des fichiers emballés dans la version chinoise. de win7.

La solution qui peut être adoptée consiste à utiliser une API tierce pour implémenter la compression zip afin de résoudre le problème des caractères chinois tronqués. Ce qui suit est l'implémentation de la compression zip à l'aide de la compression d'Apache. Le package jar requis est commons-compress-1.2.jar

ArchiveOutputStream os = new ArchiveStreamFactory()
              .createArchiveOutputStream(ArchiveStreamFactory.ZIP, out);
if(os instanceof ZipArchiveOutputStream) {
((ZipArchiveOutputStream) os).setEncoding("GBK");
}
//...some code omitted
os.putArchiveEntry(new ZipArchiveEntry(path+"/"+file.getName()));
IOUtils.copy(new FileInputStream(file), os);
os.closeArchiveEntry();
Copier après la connexion

Pour plus de connaissances sur Java, veuillez prêter attention au tutoriel de base Java colonne.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal