Python 编码错误

0 投票
2 回答
2200 浏览
提问于 2025-04-16 22:49

遇到这种错误该怎么办呢?你正在从一个文件中读取内容,但你不知道文件的编码方式。

“字节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),或者如果你知道这个文件是用什么编码写的,可以从完整的可用编码列表中选择合适的编码,详细信息可以查看这里

撰写回答