【发布时间】:2009-02-18 07:03:19
【问题描述】:
我需要在过滤我想要包含的文件列表后创建一个 Zip 存档。最好我希望该模块同时在 Windows 和 Linux 中工作。
由于我需要过滤文件列表,我真的不想使用外部程序。我也不想引入外部依赖项,这样我就可以在 Windows 上将脚本编译成单个可执行文件(使用ActiveState PDK)。
我已经尝试过的
到目前为止,我一直在使用 CPAN 上的 Archive::Zip,但它在使用非 ASCII 文件名的 Windows 机器上存在一个重大错误:文件名在存档中被损坏,因为它们没有被翻译成 unicode。
有一个bug report filed,但它已经超过 10 个月没有更新,并且在模块文档中,开发人员相当无益(“修复你的计算机或摆脱 Windows”那种)。
更新:
感谢 brian 和 Alan Haggai Alavi 的澄清,Archive::Zip 似乎得到了足够的支持,以便尽快解决这些错误并最终在 Windows 中拥有一个功能齐全的 zip 模块。
【问题讨论】:
-
Zip 是一种非常古老的格式,我不完全确定它可以处理非 ANSI 字符。如果您的目标语言至少部分使用拉丁字母(即非中文),您应该尝试将文件名转换为标准拉丁字母。
-
其实规范中已经有规定存储文件名的utf8版本。您可以在pkware.com/documents/casestudies/APPNOTE.TXT的附录D中阅读它
-
是否更新了 Archive::Zip 的所有依赖项?