2010-11-03 8 views
0

Je ne trouve aucune documentation sur l'encodage des noms de fichier dans les fichiers zip.Codage du nom de fichier ZipEntry?

Je dois emballer des noms de fichiers avec des trémas allemands dans un zip, le charger dans un Android et décompresser là. Ensuite, je dois me référer à ces fichiers avec des noms qui sont stockés dans un autre fichier. Ce dernier est UTF-8, donc il n'y a pas de problème avec les trémas. Mais je dois m'assurer que les fichiers décompressés ont les noms propres après le déballage sur Android.

Actuellement, j'utilise info-zip sur Windows 7 pour emballer l'archive, et les fonctions API sur l'Android pour décompresser, et tout a fonctionné. Cependant, si j'utilise jar du Java SDK ou 7z pour l'empaquetage, les fichiers sortent sur l'Android avec des mauvais noms. Cela me fait penser, s'il y a une bonne solution pour cela (en plus d'utiliser des noms de fichiers ASCII antiques seulement). Je suppose que Android utilise des noms de fichiers Unicode, donc tout ce que j'ai dû faire est de forcer le programme de fermeture à glissière pour encoder les noms de fichiers en Unicode aussi. C'est possible?

Merci pour votre temps, RG

Répondre

1

J'ai trouvé une solution de contournement.

public static String iso (String s) 
    { 
     byte bytes[]=EncodingUtils.getBytes(s,"iso-8859-1"); 
     return new String(bytes); 
    } 

Cette fonction convertit une chaîne ISO-8859-1 en chaîne Java Unicode. Vous pouvez l'appliquer au nom de fichier obtenu à partir de ZipEntry.getName(), et l'utiliser pour stocker le fichier. Cela vous permet de générer des zips et de lire le contenu sur Android.

Pour le transport de Windows (disons) à Android, vous pouvez compresser et décompresser en utilisant jar du JDK. Info-zip ne fonctionne pas!

C'est une solution assez cool, mais elle échouera pour les caractères japonais ou quoi que ce soit à partir de ISO-8859-1. Je ne sais pas quoi faire alors.

+0

votre solution n'a pas fonctionné pour moi. –

0

La dernière fois que j'ai vérifié la carte SD a un jeu de caractères ISO8859-1 et pas UTF-8. Ceci est pour la compatibilité avec les systèmes Windows. Je suppose que vous devrez convertir les chaînes Java Unicode en ISO8859-1. Mais je pense que la meilleure solution serait d'utiliser uniquement des caractères ASCII.

+0

Ce n'est bien sûr pas une solution, mais une solution de contournement. En effet, j'ai trouvé dans les docs Android que les noms de fichiers en Java sont convertis en séquences d'octets utf-8 avant d'être envoyés au système, et vice versa. Cela permet une utilisation cohérente des noms de fichiers Unicode dans Android. La seule question qui reste est de savoir comment les transférer depuis et vers Windows en utilisant un fichier zip. – Rene

+0

J'ai cherché pour cela il ya une minute, et j'ai trouvé le bugentry - le problème est connu et aussi assez vieux: http://bugs.sun.com/view_bug.do?bug_id=4244499 Je suppose que vous aurez une de ces options : 1) Attendez que le bug soit corrigé et que Android le rattrape 2) Utilisez votre propre implémentation ZIP qui n'utilise pas UTF-8 3) Stick avec des caractères ASCII pour l'instant 4) Recommandez un meilleur système d'exploitation à vos utilisateurs; – mreichelt

Questions connexes