在我的Linux服务器上,我有一些带有重音名称的文件(test-éàïù.zip)。 当我使用7zip命令行工具将它们添加到新的ZIP文件时,不会保存字符集/编码信息,并且在Windows计算机上打开时,存档无法正确显示文件名。 我知道7zip创建Zip V1.0档案,而不是2.0。也许charset仅限于MSDos charset? 如何使用7zip或其他zip工具指定编码,以获得便携式存档?
谢谢:)
答案 0 :(得分:9)
这个是超级用户问题,但是......
ZIP使用IBM437的默认代码页。有可能使用UTF-8,但并非所有的zip工具和库都支持它。有些zip工具会执行任意代码页,即使zip规范只允许IBM437或UTF-8。我认为WinRar就是这样一个工具。
DotNetZip进行编码。它将执行UTF-8或任意代码页。如果您正在编写应用程序,则有一个.NET库。如果从脚本运行,则有命令行工具。无论哪种方式,DotNetZip都需要.NET。您将需要Mono在Linux上运行它。
命令行示例:
zipit.exe Olivier.zip -cp 860 test-éàïù.txt
(使用860代码页)我不确定Windows资源管理器是否正确处理zip文件,其中包含拉链内文件名的替代编码。
有关该zipit.exe工具的详细信息,请参阅How to zip specified folders with Command Line。
答案 1 :(得分:0)
使用指定的代码页创建ZIP文件:
7z a -mcp=<code_page> -tzip <archive_name> <file_names>...
使用指定的代码页从ZIP文件中提取文件:
7z x -mcp=<code_page> <archive_name>