Tar File在.tar.gz成就中生成乱码文件名

时间:2013-11-11 09:09:29

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

在Windows上,当文件路径中有中文字符时,中文字符会在tar.gz中出现乱码,解压缩后仍会出现乱码。

1 个答案:

答案 0 :(得分:0)

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

对于PAX之前的所有tarball格式 - 包括tarfile使用的默认格式 - 文件名存储在"本地文件系统编码"中。压缩程序必须大量猜测解压缩程序需要什么,反之亦然。如果你不想对你的程序进行猜测,Python会为你做,并猜测UTF-8。请参阅TarFile,其中说明如果您没有指定任何内容,它会使用ENCODING,而ENCODING会解释它在Windows上默认为'utf-8'

所以,有三种解决方案:

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