python - 在 python 中设置隐式默认编码\解码错误处理

标签 python decode encode

我正在处理以 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/

相关文章:

java - 编译器组件的良好源代码

c# - 整数解码从 Java 移植到 C#

c - 如何为 FFmpeg 库创建函数以将帧编码为任何(可能的)格式?

JavaScript 和 PHP : How to encode a normal string in a encoded short string?

php - 编码数据的最佳方式

python - 当需要窗口中多列的所有变量时如何应用滚动函数

python - 为什么 Python 的字典没有 .iter()?

python - 删除包含多个元素的列 pandas

将二进制转换为对应的 ASCII 字符

java - Java NIO 解码过程中如何去掉不正确的符号?