【问题标题】:How to create ZIP files with specific encoding如何创建具有特定编码的 ZIP 文件
【发布时间】:2009-10-02 17:11:17
【问题描述】:

在我的 Linux 服务器上,我有一些带有重音名称的文件 (test-éàïù.zip)。 当我使用 7zip 命令行工具将它们添加到新的 ZIP 文件时,不会保存字符集/编码信息,并且在 Windows 计算机上打开时,存档无法正确显示文件名。 我知道 7zip 创建 Zip V1.0 档案,而不是 2.0。也许字符集仅限于 MSDos 字符集? 如何使用 7zip 或其他 zip 工具指定编码,以获得可移植存档?

【问题讨论】:

  • 这属于 superuser.com

标签: windows linux encoding zip character-encoding


【解决方案1】:

一个超级用户的问题,但是...

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 资源管理器是否正确处理带有替代编码的 zipfiles 文件名在 zips 中。

有关该 zipit.exe 工具的更多信息,请参阅 How to zip specified folders with Command Line

【讨论】:

    【解决方案2】:

    使用指定的代码页创建一个 ZIP 文件:

    7z a -mcp=<code_page> -tzip <archive_name> <file_names>...
    

    使用指定的代码页从 ZIP 文件中提取文件:

    7z x -mcp=<code_page> <archive_name>
    

    【讨论】:

      【解决方案3】:

      我知道 7zip 创建 Zip V1.0 存档,而不是 2.0。

      我不知道如何使用 7zip 创建 zip v1.0 存档。

      您可以使用 Info-Zip 的 zip 1.1 创建版本 1 ZIP 存档,该版本仍然可用(从 FTP http://infozip.sourceforge.net/Zip.html#Downloads 下载)。您需要从源代码构建它(在 Linux 系统上制作 sysv);那么您就可以使用新建的 zip 来创建旧格式的存档:

      ]# ./zip filename.zip file1 file2 file3
      ]# file filename.zip 
      ]# filename.zip: Zip archive data, at least v1.0 to extract
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2015-01-04
        • 2011-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多