我正在尝试使用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();
答案 0 :(得分:0)
似乎Windows资源管理器的内置zip实用程序无法处理UTF-8文件名。当我使用7-Zip时,问题就消失了。