Maison Java javaDidacticiel ZipinputStream n'a pas réussi à décompresser le nom du fichier chinois? Comment définir correctement le jeu de caractères?

ZipinputStream n'a pas réussi à décompresser le nom du fichier chinois? Comment définir correctement le jeu de caractères?

Apr 19, 2025 pm 04:33 PM
linux windows apache 操作系统 macos cos red

ZipinputStream n'a pas réussi à décompresser le nom du fichier chinois? Comment définir correctement le jeu de caractères?

Décompression zipinputstream des noms et solutions de fichiers chinois

De nombreux développeurs rencontrent souvent des problèmes de codage de caractères lors de l'utilisation ZipInputStream pour décompresser les packages compressés Zip contenant des noms de fichiers chinois ou des noms de dossiers, ce qui conduit à des défaillances de décompression et invite des erreurs comme "l'entrée mal formée: 1, longueur: 1". Cet article analysera ce problème en profondeur et fournira des solutions efficaces.

La racine du problème est que le jeu de caractères spécifié dans le constructeur ZipInputStream n'est pas utilisé pour décompresser le nom de fichier codage à l'intérieur du fichier, mais pour lire les informations du répertoire central du fichier zip lui-même. Le codage du répertoire central dépend de l'environnement dans lequel le package compressé est créé et du système d'exploitation. Les systèmes Windows utilisent généralement le codage GB2312 ou GBK, tandis que les systèmes MacOS et Linux utilisent généralement le codage UTF-8.

Par conséquent, si un package de compression zip est créé sous Windows, son répertoire central est susceptible d'être codé à l'aide de GBK. Même si le codage UTF-8 est spécifié dans le code, ZipInputStream ne parvient toujours pas à analyser correctement le répertoire central codé par GBK, entraînant une défaillance de décompression.

Solution:

Pour les packages ZIP créés par Windows Systems, il est recommandé d'utiliser le codage GBK pour lire le répertoire central:

 FileInputStream Input = new FileInputStream (TargetPath);
ZipinputStream zipinputStream = new ZipinputStream (new BufferedInputStream (entrée), charset.forname ("gbk"));
Copier après la connexion

Étant donné que le codage GBK est compatible avec GB2312, cette méthode s'applique également au répertoire central du codage GB2312.

Solutions multiplateformes:

Pour écrire un code compatible multiplateforme plus robuste, la bibliothèque Apache Commons Compress est recommandée. Cette bibliothèque offre des fonctions de compression / décompression plus puissantes, qui peuvent gérer automatiquement les packages de compression ZIP de différents codages, évitant efficacement les défaillances de décompression en raison des différences de jeu de caractères. Il peut détecter et traiter automatiquement les informations de répertoire central de différents codes, simplifier le processus de développement et améliorer la fiabilité du code.

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Architecture Linux: dévoiler les 5 composants de base Architecture Linux: dévoiler les 5 composants de base Apr 20, 2025 am 12:04 AM

Les cinq composants de base du système Linux sont: 1. Kernel, 2. Bibliothèque système, 3. Utilitaires système, 4. Interface utilisateur graphique, 5. Applications. Le noyau gère les ressources matérielles, la bibliothèque système fournit des fonctions précompilées, les utilitaires système sont utilisés pour la gestion du système, l'interaction GUI fournit une interaction visuelle et les applications utilisent ces composants pour implémenter des fonctions.

Comment utiliser la solution Redis Cache pour réaliser efficacement les exigences de la liste de classement des produits? Comment utiliser la solution Redis Cache pour réaliser efficacement les exigences de la liste de classement des produits? Apr 19, 2025 pm 11:36 PM

Comment la solution de mise en cache Redis réalise-t-elle les exigences de la liste de classement des produits? Pendant le processus de développement, nous devons souvent faire face aux exigences des classements, comme l'affichage d'un ...

Quelle est la différence entre les fuites de mémoire dans les programmes Java sur les processeurs ARM et architecture x86? Quelle est la différence entre les fuites de mémoire dans les programmes Java sur les processeurs ARM et architecture x86? Apr 19, 2025 pm 11:18 PM

Analyse du phénomène de fuite de mémoire des programmes Java sur différents processeurs d'architecture. Cet article discutera d'un cas où un programme Java présente différents comportements de mémoire sur les processeurs ARM et architecture x86 ...

Lors de la construction d'une architecture de microservice à l'aide de Spring Cloud Alibaba, devez-vous gérer chaque module dans une structure d'ingénierie parent-enfant? Lors de la construction d'une architecture de microservice à l'aide de Spring Cloud Alibaba, devez-vous gérer chaque module dans une structure d'ingénierie parent-enfant? Apr 19, 2025 pm 08:09 PM

À propos des microservices de SpringCloubaba Développement modulaire à l'aide de SpringCloud ...

Pourquoi la valeur de retour est-elle vide lors de l'utilisation de Redemplate pour la requête par lots? Pourquoi la valeur de retour est-elle vide lors de l'utilisation de Redemplate pour la requête par lots? Apr 19, 2025 pm 10:15 PM

Pourquoi la valeur de retour est-elle vide lors de l'utilisation de Redemplate pour la requête par lots? Lorsque vous utilisez Redemplate pour les opérations de requête par lots, vous pouvez rencontrer les résultats renvoyés ...

Dans un environnement multi-nœuds, comment s'assurer que la tâche de synchronisation @Scheduled de Spring Boot est exécutée uniquement sur un seul nœud? Dans un environnement multi-nœuds, comment s'assurer que la tâche de synchronisation @Scheduled de Spring Boot est exécutée uniquement sur un seul nœud? Apr 19, 2025 pm 10:57 PM

La solution d'optimisation pour les tâches de synchronisation Springboot dans un environnement multi-nœuds développe le ressort ...

Comment traiter et afficher les nombres en pourcentage en Java? Comment traiter et afficher les nombres en pourcentage en Java? Apr 19, 2025 pm 10:48 PM

Affichage et traitement des nombres en pourcentage en Java dans la programmation Java, la nécessité de traiter et d'afficher les nombres en pourcentage est très courante, par exemple, lors du traitement des tables Excel ...

See all articles