ZipFile (System.IO.Compression)、c# (WPF) 的字符提取问题

Posted

技术标签:

【中文标题】ZipFile (System.IO.Compression)、c# (WPF) 的字符提取问题【英文标题】:char extraction issue with ZipFile (System.IO.Compression), c# (WPF) 【发布时间】:2020-01-14 13:42:11 【问题描述】:

我正在尝试提取包含多个文件的 zip。某些文件的名称中包含“§”字符(“abc(§7)abc.txt”)。 开箱时,

System.IO.Compression.ZipFile.ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName);

但是,“§”字符被翻译成“õ”(带波浪号的拉丁文小写字母 O)字符。

我已经尝试更改编码。但是只有 ASCII 或 UTF-8(默认)

System.IO.Compression.ZipFile.ExtractToDirectory(sourceArchiveFileName, destinationDirectoryName, Encoding entryNameEncoding);

有人能告诉我错误吗?

【问题讨论】:

我经历了一堆不同的编码,但我找不到§的编码与õ的UTF-8编码相同的编码...事实上,õ 的 UTF-8 编码是 2 个字节:您确定只有单个 § 字符被转换为 õ,或者它可能采用 () 之一也一样? 我也搜索了相关性,但没有找到。只翻译单个字符。 我现在尝试了一个不同的库:ionic.Zip 结果:这次我得到“⌡”(下半部分积分)而不是“§” 【参考方案1】:

Windows 不能很好地处理 zip 中的 unicode 文件名。 使用 Enconding 850 解决了这个问题。

Encoding.GetEncoding(850);

看起来它已在 .Net framework 4.8 中修复,但我现在无法对其进行测试。

来源:

https://devblogs.microsoft.com/oldnewthing/20180515-00/?p=98755 http://archives.miloush.net/michkap/archive/2012/01/04/10252916.html

【讨论】:

非常感谢!这有帮助。 在哪里可以看到关于它在 4.8 中被修复的信息?没有一个链接提到它?

以上是关于ZipFile (System.IO.Compression)、c# (WPF) 的字符提取问题的主要内容,如果未能解决你的问题,请参考以下文章

zipfile.ZipFile

python zipfile 文件压缩和文件

python模块之ZipFile

无法使用 python 创建 ZIPfile

Python 压缩文件处理 zipfile & tarfile

使用 ZipFile 模块从 zipfile 中删除文件