2010-04-02 173 views
3

我正在使用DotNetZip。當我正在歸檔有英文名稱的文件時。但是當我存檔與文件的壞名稱結果存檔俄文名稱的文件。有人說,字符串DotNetZip編碼問題

ZipConstants.DefaultCodePage = 866; 

但它不編譯。我也使用zip.UseUnicodeAsNecessary屬性,並將我的文件名轉換爲utf8和utf7。

+0

對不起,我這兩個庫之間有點糊塗: http://www.icsharpcode.net/OpenSource/SharpZipLib/ http://dotnetzip.codeplex.com/releases/view/27890 在第一次alll真的像我想要的那樣工作。但我很感興趣,第二次如何做到這一點。因爲第二個庫有很好的功能,可以:在檔案中添加文件,文件夾。 – Xaver 2010-04-02 08:55:10

+0

不要將文件名轉換爲utf8,請將它留給庫來爲您完成。 – 2010-04-02 12:46:21

+0

你提到的常量在DotNetZip中不存在。另外,不需要將您的文件名從utf-8「轉換」爲utf-7或其他任何文件。 DotNetZip將在您選擇的代碼頁中爲您執行字符串編碼。請參閱http://cheeso.members.winisp.net/DotNetZipHelp/html/aecbb638-1ecf-807e-b933-5bb1a2a95e81.htm – Cheeso 2010-04-06 21:06:56

回答

8

要創建DotNetZip一個unicode zip文件:

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

如果你想要一個特定的,具體的代碼頁,則必須使用別的東西:

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

檢查the documentation對於之前的那些屬性使用它們!

+3

UseUnicodeAsNecessary已過時,建議使用以下代碼: zip.AlternateEncodingUsage = ZipOption.Always; zip.AlternateEncoding = Encoding.UTF8; – David 2012-10-31 03:50:45

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

Windows資源管理器不支持UTF-8編碼的zip文件。要閱讀您創建的zip文件,您必須使用支持unicode的工具或庫,例如WinRar,DotNetZip等。 – 2015-05-19 01:22:35

+0

我已在Windows 8.1機器上成功打開UTF-8 zip文件。 – Funbit 2015-06-15 05:02:50

2

試試這個

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

編碼類型:encoding type info

+0

Codest的解決方案不適合我,這一個:) – Txaku 2017-01-09 16:28:42