2010-04-02 6 views
3

J'utilise DotNetZip. Quand je suis en train d'archiver un fichier qui a un nom anglais normalement. mais quand j'archive le dossier avec des noms russes dans l'archive de résultat avec de mauvais noms de dossier. Certains peuples ont dit que la chaîneProblème avec DotNetZip avec le codage

ZipConstants.DefaultCodePage = 866; 

Mais il ne compile pas. J'utilise aussi les propriétés zip.UseUnicodeAsNecessary, et convertis mes noms de fichiers en utf8 et utf7.

+0

désolé, je suis un peu confus entre ces deux bibliothèques: http://www.icsharpcode.net/OpenSource/SharpZipLib/ http://dotnetzip.codeplex.com/releases/view/27890 dans le premier alll fonctionne vraiment comme je le veux. mais je suis très intéressé comment faire cela en second lieu. parce que la deuxième bibliothèque a les bons clases ce qui peut: ajouter des fichiers, des dossiers dans les archives. – Xaver

+0

Ne convertissez pas vous-même les noms de fichiers en utf8, laissez le soin à la bibliothèque de le faire pour vous. –

+0

La constante à laquelle vous faites référence n'existe pas dans DotNetZip. De plus, il n'est pas nécessaire de "convertir" vos noms de fichiers de utf-8 à utf-7, ou quoi que ce soit d'autre. DotNetZip effectuera le codage de chaîne pour vous, dans la page de code que vous sélectionnez. voir http://cheeso.members.winisp.net/DotNetZipHelp/html/aecbb638-1ecf-807e-b933-5bb1a2a95e81.htm – Cheeso

Répondre

8

Pour créer un fichier zip unicode DotNetZip:

using (var zip = new ZipFile()) 
{ 
    zip.UseUnicodeAsNecessary= true; 
    zip.AddFile(filename, "directory\\in\\archive"); 
    zip.Save("archive.zip"); 
} 

Si vous voulez une page de code spécifique particulier, vous devez utiliser quelque chose d'autre:

using (var zip = new ZipFile()) 
{ 
    zip.ProvisionalAlternateEncoding = System.Text.Encoding.GetEncoding(866); 
    zip.AddFile(filename, "directory\\in\\archive"); 
    zip.Save("archive.zip"); 
} 

Vérifiez the documentation pour ces propriétés avant les utiliser!

+3

UseUnicodeAsNecessary est obsolète, et l'utilisation du code ci-dessous est recommandée: zip.AlternateEncodingUsage = ZipOption.Always; zip.AlternateEncoding = Encoding.UTF8; – David

15
zip.AlternateEncodingUsage = ZipOption.Always; 
zip.AlternateEncoding = Encoding.UTF8; 
+0

Windows Explorer ne prend pas en charge les fichiers zip codés en UTF-8. Pour lire le fichier zip que vous créez, vous devrez utiliser un outil ou une bibliothèque qui prend en charge unicode, tels que WinRar, DotNetZip, etc. –

+0

J'ai réussi à ouvrir le fichier zip UTF-8 sur mon ordinateur Windows 8.1. – Funbit

2

essayer cette

zip.AddEntry("yourfile.txt", "yourtext", Encoding.GetEncoding("utf-8")); 

type d'encodage: encoding type info

+0

La solution de Codest n'a pas fonctionné pour moi, celle-ci a fait :) – Txaku