Zipfile 字符编码挑战

Zipfile 字符编码挑战

注意:这个问题不同于使用给定的编码解压缩 ZIP因为这些解决方案都不起作用,而且我不确定正常运行的解压缩程序是否能检索正确的文件名。

有一个带有日文字符文件名的 zip 文件。unzip可以指定字符编码,这通常可以检索正确的文件名。(它不在我的发行版的 unzipmaninfo页面中,但它在可执行文件的帮助输出中。)

但它对一些 zip 文件不起作用,包括这个。这是动画程序 MikuMikuDance 的文件集合。几个文件在使用时unzip -O sjis -l archive.zip或使用 file-roller 解压时会显示“垃圾”文件名。

档案中的另一个文件引用了垃圾文件名,尽管它引用的是名称的 shift-JIS 编码而不是 UTF8。它会尝试加载这些文件,因此如果命名错误,则无法加载。这里的问题是 zip 文件是否可以由其他程序提取正确的文件名,以及它们在上传者的系统中是否被正确命名。

所需文件名为“Figure_その他.fx”(日语中为“其他”)。它在 zip 文件中似乎有两种不同的表示,一种是“����”,即 SJIS 被解释为 UTF8,另一种是 U+0082 和一些泰语字符:

grep 二进制文件 第二个版本是 unzip 的输出,带或不带-O sjis选项。似乎没有任何方法可以将其转换回原始文件名。

原始 zip 文件可以下载这里(25 MB),其内容可以用免费程序 MikuMikuDance 打开,尽管“.fx”文件用于 MikuMikuEffect,而 MikuMikuEffect 需要几个本机库才能在 Wine 中运行。但也许有人可以在没有 zip 文件的情况下回答这个问题。

zip 文件是否存储了通常不使用的备用文件名?在日本计算机上,反斜杠显示为日元符号是否与未使用的文件名有关?如果您将显示为“Normalmap Effect\Skin\Figure_���̑�.fx”的字符串通过管道传输到iconv -f sjis -t utf8,则输出为“Normalmap Effect¥Skin¥Figure_その他.fx”。维基百科讨论了“额外字段”;它是否用于存储和检索“坏”文件名?

答案1

我刚刚使用您提供的链接亲自测试了这一点,并下载了一个名为谢谢你的项目.zip,我必须使用密码解压864使用 7-zip,没有遇到任何问题。我得到的文件正确吗?

答案2

这个问题与拉链有关固定的在最近的far2l 文件和档案管理器。要使 far2l 的 zip 旧字符集检测正常工作,您的系统语言设置应与创建存档的系统上的设置相匹配(Windows 的内部“zip 文件夹”工具使用相同的逻辑)。您也可以这样做

LANG=ja_JP.UTF-8 far2l

答案3

原始答案:反斜杠显示为日元符号无关。第二个文件名是 UTF-8 文件名,如第 4.5、4.6 节和附录 D 中所述.ZIP 规范

在这个特殊情况下,文件名以 Shift-JIS 格式传递给打包程序,但打包程序却认为它是 ISO-8859-11 或 TIS-620(泰语编码)。输入的其中一个字节被认为是或转换为 Unicode 中的不同字符,从而无法恢复正确的文件名。

当使用 Info-ZIP Unicode 路径额外字段时,7z 或 Info-ZIP 等程序unzip会假定它是有效的,并忽略基本文件名字段和-O用于unzip设置源字符编码的选项。

添加一个选项来覆盖此行为的补丁可能会受到程序维护人员的欢迎。

更新答案:-UU 允许您忽略 Unicode 文件名。我不知道这个选项是什么时候添加的。所以,

 unzip -UU -O cp932 -l "Thank You For You Project.zip"

显示原始的日语文件名:Figure_その他.fx。

相关内容