python-3.x - 在 Python 3 中打开 tar 文件时出现 UnicodeDecodeError

标签 python-3.x tar python-unicode

我使用的是 Linux Mint 18.1 和 Python 3.5.2。

我有一个当前使用 Python 2.7 运行的库。我需要将该库用于 Python 3 项目。我正在更新它,但遇到了似乎无法修复的 unicode 问题。

首先,通过 tar cvjf tarfile.tbz2 (在 Linux 系统上)创建一个文件,然后在 Python 库中以 open(tarfile) 的形式打开。

如果我使用 Python 3 按原样运行代码,则会收到以下错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc1 in position 11: invalid start byte

我第一次尝试修复是将其打开为open(tarfile,encoding='utf-8'),因为我的印象是 tar 只会使用文件系统提供的内容。当我这样做时,我收到相同的错误(字节值发生变化)。

如果我尝试使用其他编码,例如 latin-1,我会收到以下错误:

TypeError: Unicode-objects must be encoded before hashing

这让我相信 utf-8 是正确的,但我可能会误解。

有人可以提供建议吗?

最佳答案

我走错了路,认为这是一些奇怪的编码问题。当这只是一个简单的问题时,open() 默认读取为文本 (r)。在 Python 2 中,这是一个空操作。

修复方法是open(tarfile, 'rb')

带有 unicode 的头假货...应该看到这个的到来。 :捂脸:

关于python-3.x - 在 Python 3 中打开 tar 文件时出现 UnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44933126/

相关文章:

python - 如何在删除重复后维护字符串列表的索引?

python - 带有 Python3 和 Gtk3 的 MVC

archive - TAR 可以同时记录符号链接(symbolic link)和它们引用的文件/目录吗?

linux - tar 从存档内的文件夹中提取所有文件

python - 如何处理 urllib2.urlopen 中的®?

Python 以特定顺序生成子列表 - itertools?

Django 将请求数据传递给 Forms.py

linux - 从存档中提取确切文件的快速方法

Python Unicode 编码错误

python - 我如何连接到 presto pyhive?