使用 Python 3 的 readlines() 处理 Unicode 错误

Unicode error handling with Python 3's readlines()

提问人:zzzbbx 提问时间:5/8/2012 最后编辑:Mr_and_Mrs_Dzzzbbx 更新时间:9/22/2017 访问量:95635

问:

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

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

python-3.x 发短信 编码

评论

1赞 Charles Duffy 5/8/2012
这因细节而异。蟒蛇 2?蟒蛇 3?您是否正在尝试解码已读取的字符串?如何?等。

答:

-5赞 cobie 5/8/2012 #1

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

try:
    ....
except UnicodeEncodeError: 
    pass
79赞 Charles Duffy 5/8/2012 #2

在 Python 3 中,在创建文件对象时传递一个适当的值(例如 or)(假设它是 -- 的子类,如果不是,请考虑将其包装在一个子类中!此外,请考虑传递比(当您不确定时,始终是一个好的起点)更有可能的编码。errors=errors=ignoreerrors=replaceio.TextIOWrappercharmaputf-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

2赞 optixx 5/8/2012 #3

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

import codecs
fd = codecs.open(filename,'r',encoding='utf-8')
data = fd.read()