我使用的是 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/