37

我在阅读文本文件时不断收到此错误。是否可以处理/忽略它并继续?

UnicodeEncodeError:“charmap”编解码器无法解码位置 7827 中的字节 0x81:字符映射到未定义。

4

3 回答 3

69

在 Python 3 中,在创建文件对象时传递一个适当的errors=值(例如errors=ignoreor errors=replace)(假设它是io.TextIOWrapper-- 如果不是,请考虑将其包装在一个中!);另外,考虑传递一个更有可能的编码比charmap(当你不确定时,utf-8总是一个很好的起点)。

例如:

f = open('misc-notes.txt', encoding='utf-8', errors='ignore')

在 Python 2 中,该read()操作只返回字节;那么,诀窍是解码它们以将它们变成一个字符串(如果你这样做,实际上,需要字符而不是字节)。如果您对它们的真实编码没有更好的猜测:

your_string.decode('utf-8', 'replace')

...替换未处理的字符,或

your_string.decode('utf-8', 'ignore')

简单地忽略它们。

也就是说,最好找到并使用它们的真实编码(而不是猜测utf-8)。

于 2012-05-07T19:06:54.463 回答
1

您应该使用编解码器打开文件,以确保文件被解释为 UTF8。

导入编解码器
fd = codecs.open(文件名,'r',encoding='utf-8')
数据 = fd.read()
于 2012-05-07T19:26:11.430 回答
-4

是的..你可以把它包在一个

try:
    ....
except UnicodeEncodeError: 
    pass
于 2012-05-07T19:04:14.867 回答