【问题标题】:Tarfile produce garbled file name in the .tar.gz archivementTarfile 在 .tar.gz 归档中产生乱码文件名
【发布时间】:2013-11-23 00:43:02
【问题描述】:

在windows上,当文件路径中有汉字时,tar.gz中的汉字会出现乱码,解压后还是乱码。

【问题讨论】:

  • python3,标题中可以看到
  • 那么,您是否尝试阅读tarfile 文档但不理解那里的解释?还是您只是懒得尝试?

标签: python python-3.x chinese-locale


【解决方案1】:

这一切都在文档中的Unicode issues 中进行了解释。

对于 PAX 之前的所有 tarball 格式(包括 tarfile 使用的默认格式),文件名都存储在“本地文件系统编码”中。压缩程序必须对解压缩程序想要什么进行疯狂的猜测,反之亦然。如果你不猜你的程序,Python 会帮你猜,猜 UTF-8。请参阅TarFile,它说明如果您不指定任何内容,它将使用ENCODING,以及ENCODING,它说明它在Windows 上默认为'utf-8'

所以,有三种解决方案:

  1. 使用 PAX 格式的压缩包。这很容易;只需将format=tarfile.PAX_FORMAT 传递给TarFile 构造函数。 (您也可以设置tarfile.DEFAULT_FORMAT = tarfile.PAX_FORMAT 来更改默认值。)只要您用来解压的工具理解PAX,就可以了。
  2. 找出您的解压缩工具需要哪种编码,并通过将 format='big5' 传递给 TarFile 构造函数来明确指定。 (您也可以设置 tarfile.ENCODING='big5' 来更改默认值。)同样,您的工具很有可能使用系统配置的 OEM 字符集,但不能保证这一点,而且在不知道您使用的是什么工具的情况下,我不能给出有关如何解决的更多详细信息。
  3. 让 Python 使用 UTF-8,并说服您的解压工具读取 UTF-8 而不是胡乱猜测。在不知道您使用的是哪种工具的情况下,我无法提供更详细的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多