Python 编码错误
遇到这种错误该怎么办呢?你正在从一个文件中读取内容,但你不知道文件的编码方式。
“字节0xed”是什么意思?
“位置3792”又是什么意思呢?
我会尝试自己回答这个问题,然后再发帖,但我有点烦,因为我花了这么长时间来搞明白这个事情。有没有什么方法可以忽略这些未知的编码,继续读取文件呢?我只是想读取一个文本文件!
Traceback (most recent call last):
File "./test.py", line 8, in <module>
for x in fin:
File "/bns/rma/local/lib/python3.1/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 3792: ordinal not in range(128)
2 个回答
0
我觉得我找到了一个简单的方法 :) :
fin = (x.decode('ascii', 'ignore') for x in fin)
for x in fin: print(x)
这里的 errors='ignore' 可以换成 'replace' 或其他选项。这样做至少符合我想要的原则:“输入垃圾,输出也垃圾”。
3
0xed
是字符 í
的 Unicode 编码,这个字符在输入数据中的位置是 3792(也就是说,从第一个字母开始数,第 3792 个字母就是 í
)。
你现在用的是 ASCII 编码来解码这个文件,但这个文件并不是用 ASCII 编码的,试试用支持 Unicode 的编码来解码(比如 utf_8
),或者如果你知道这个文件是用什么编码写的,可以从完整的可用编码列表中选择合适的编码,详细信息可以查看这里。