0

在 C# 中,我的应用程序在 Windows Server 2008 R2 上运行,我需要能够提取在 Windows 或 MAC OSX 上创建的任何 ZIP 文件。我目前正在使用DotNetZip 库

但是这个库在提取文件名中带有特殊北欧字符的 MACOSX ZIP 档案时遇到了麻烦。我尝试在 Encoding.GetEncoding(string) 方法中指定不同的编码,包括macintosh 。

Windows 内置的 zip 工具也会弄乱特殊字符。WinRAR 3.x 也可以。但是 WinRAR 4.x 似乎是唯一能正确完成这项工作的工具。

是否有可能使用任何可用的 C# ZIP 库来提取这样的 ZIP 存档?

更新:这是使用 Mac OSX 中的默认 Zip 功能创建的 zip 存档的示例。第一个屏幕截图显示了 Windows Zip 功能如何无法解码文件名。第二个屏幕截图显示了使用 WinRAR 4.11 打开的存档:

使用 Windows 7 Zip 打开的存档 使用 WinRAR 4.11 打开的存档

从 Mac OSX下载示例 ZIP 存档

4

1 回答 1

2

你结帐了吗SevenZipSharp...它使用 7-Zip dll 来提取档案和 IMO,7-zip 是最好的档案处理程序..

更新 :

我正在研究示例 zip 和DotNetZip.

通过DotNetZip-WinFormsTool.exeDotNetZip二进制文件中提供,您可以在DropDownBox.

我尝试了其中一些,包括 UTF-8、Zip Default(IBM437)、UTF-32、Unicode 等。

我使用 UTF-8 编码获得了最好的结果...与 WinRAR 相同的阅读...

此外,IMO 只有 WinRAR 对所有存档使用 UTF-8,而其他 Zip 工具(如 7-Zip、Explorer Default Zip Viewer)使用 Zip Default 编码,这使他们能够错误地读取文件名!

所以你最好的选择是坚持DotNetZip并使用一些这样的代码:

using (ZipFile zf = new ZipFile(Application.StartupPath + "\\Arkiv.zip", new UTF8Encoding()))
{
    zf.ExtractAll(Application.StartupPath + "\\Arkiv\\");
}

这段代码经过测试可以由我使用!请注意,提取后文件名将在资源管理器中以 UTF8 格式显示,但如果您直接打开 zip 文件,资源管理器将使用 Zip 默认编码。

DotNetZip以 UTF-8 编码显示该工具的图像: 图片

更新 2:

对于文本的自动检测,您Encoding可以参考This SO QuestionThis Code-Project ArticleUDE - C# port of Mozilla Universal Charset Detector

于 2012-05-25T12:13:10.913 回答