来自文件名中包含丹麦语字符的文件的ZIP文件

时间:2018-01-25 15:24:28

标签: c# unicode zip

我正在尝试使用C#中文件名中带有丹麦字符的文件创建ZIP文件。我已尝试使用ICSharpCode,System.IO.Compression和Ionic.Zip,但无论如何我都无法将丹麦字符放入ZIP文件中。

我需要文件名与原件完全相同,因为我将ZIP文件上传到我无法控制的程序。

看起来我应该选择将文件名保存为Unicode并使用newEntry.IsUnicodeText = true但是当我打开zipfile时,这给了我类似+ª+++Ñ+å+ÿ+à而不是æøåÆØÅ的东西Windows资源管理器。在IsUnicodeText = false的情况下,我得到了æ¢åÆ¥Å,这是一个很接近的 - 只有ø成为一个分钱。

如果选择UTF8编码,我从System.IO.Compression和Ionic.Zip得到相同的结果。

(我也试过ZipConstants.DefaultCodePage = 850 - 这没有帮助)

我可以看到人们多年来一直在努力解决这个问题,但我没有看到任何明确的答案。我会很感激任何提示。

// this is the ICSharpCode version 
string fileToZip = @"Kontrolplan_15_Kørestrøm.docx"; // a file
        string entryName = "Danish Letters (æøåÆØÅ).docx";
        string zipPath = @"ZsharpZIP.ZIP"; 

        using (ICSharpCode.SharpZipLib.Zip.ZipOutputStream s = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(File.Create(zipPath)))
        {

            byte[] buffer = new byte[4096];

            // ---- store statusPath
            FileInfo fi = new FileInfo(fileToZip);
            ICSharpCode.SharpZipLib.Zip.ZipEntry newEntry = new ICSharpCode.SharpZipLib.Zip.ZipEntry(entryName); 

            newEntry.Size = fi.Length;
            newEntry.IsUnicodeText = true; 
            s.PutNextEntry(newEntry);

            // write file
            using (FileStream streamReader = File.OpenRead(fileToZip))
            {
                StreamUtils.Copy(streamReader, s, buffer);
            }
            s.CloseEntry();

1 个答案:

答案 0 :(得分:0)

似乎Windows资源管理器的内置zip实用程序无法处理UTF-8文件名。当我使用7-Zip时,问题就消失了。