我正在处理以 latin1 编码的外部数据。所以我添加了 sitecustomize.py
并在其中添加了
sys.setdefaultencoding('latin_1')
果然,现在使用 latin1 字符串工作得很好。
但是,如果我遇到一些未用 latin1 编码的内容:
s=str(u'abc\u2013')
我收到 UnicodeEncodeError: 'latin-1' 编解码器无法对位置 3 中的字符 u'\u2013' 进行编码:序号不在范围(256)
我想要的是,无法解码的字符将被简单地忽略,即我会在上面的示例中得到它 s=='abc?'
,并且无需显式调用 每次调用时都进行decode()
或encode
,即不是每次调用时s.decode(...,'replace')。
我尝试使用codecs.register_error
做不同的事情,但没有成功。
请帮忙?
最佳答案
脚本无法调用 sys.setdefaultencoding 是有原因的。不要这样做,一些库(包括 Python 附带的标准库)期望默认值为“ascii”。
相反,在读入程序时(通过文件、标准输入、套接字等)将字符串显式解码为 Unicode,并在写出字符串时显式编码字符串。
显式解码采用指定不可解码字节行为的参数。
关于python - 在 python 中设置隐式默认编码\解码错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3363339/