我试图在 python2.7 中读取一个文件,它被完美地读取了。我遇到的问题是当我在 Python3.4 中执行相同的程序然后出现错误:
'utf-8' codec can't decode byte 0xf2 in position 424: invalid continuation byte'
此外,当我在 Windows 中运行程序时(使用 python3.4),不会出现错误。文件的第一行是: Codi;Codi_lloc_anonim;Nom
我的程序代码是:
def lectdict(filename,colkey,colvalue):
f = open(filename,'r')
D = dict()
for line in f:
if line == '\n': continue
D[line.split(';')[colkey]] = D.get(line.split(';')[colkey],[]) + [line.split(';')[colvalue]]
f.close
return D
Traduccio = lectdict('Noms_departaments_centres.txt',1,2)
原文由 oscarcapote 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Python2 中,
从文件中读取行 作为 bytes 。
在 Python3 中,相同的代码从文件中读取行 _作为字符串_。 Python3 字符串是 Python2 调用的
unicode
对象。这些是根据某种编码解码的字节。 Python3 中的默认编码是utf-8
。错误信息
显示 Python3 正在尝试将字节解码为
utf-8
。由于存在错误,该文件显然不包含utf-8
encoded bytes 。要解决此问题,您需要 指定文件的正确编码:
如果您不知道正确的编码,您可以运行这个程序来简单地尝试 Python 已知的所有编码。如果幸运的话,会有一种编码将字节转换为可识别的字符。有时 可能 不止一种编码有效,在这种情况下,您需要仔细检查和比较结果。