我正在使用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
是正确的,但我可能会误解。
有人可以提供建议吗?
答案 0 :(得分:2)
我走错了路,以为这是一个奇怪的编码问题。当open()
默认为文本(r
)时,这只是一个简单的问题。在Python 2中,它是一个无操作。
修复方法是open(tarfile, 'rb')
。
带有unicode的假头......应该看到这一个来了。 :捂脸: