Python字符集解码出错时可通过errors参数控制行为:'ignore'跳过非法字节,'replace'替换为,'backslashreplace'转义,'xmlcharrefreplace'转XML引用,或自定义处理器。

当字符集解码出错(比如用 UTF-8 解码一段实际是 GBK 编码的字节流),Python 默认会抛出 UnicodeDecodeError。你可以通过设置 errors 参数来控制出错行为:忽略错误、替换为占位符,或自定义处理。
使用 errors="ignore" 忽略非法字节
该选项会直接跳过无法解码的字节,不报错也不保留对应字符。适合对数据完整性要求不高、只想快速拿到可读文本的场景。
- 示例:
b'ÿþ '.decode('utf-8', errors='ignore')→ 返回空字符串''(因为三个字节都不符合 UTF-8 编码规则) - 注意:可能丢失内容,且无法判断哪里被跳过了
使用 errors="replace" 替换为 符号
这是最常用的安全选项。所有解码失败的位置都会替换成 Unicode 替换字符 U+FFFD(显示为 ),便于定位问题位置。
- 示例:
b'helloÿworld'.decode('utf-8', errors='replace')→'helloworld' - 适用于日志解析、用户输入预处理等需要保留结构又不怕显示异常的场合
其他可用的 errors 模式
Python 还支持更多策略,按需选用:
-
errors='backslashreplace':把非法字节转成\xhh形式,如b'ÿ'.decode('utf-8', errors='backslashreplace')→'\xff' -
errors='xmlcharrefreplace':转成 XML 字符引用,如'ÿ' - 自定义错误处理器:通过
codecs.register_error()注册函数,实现更精细控制(如记录错误位置、改用备用编码重试)
文件读取时同样适用
在用 open() 读文件时,直接传入 errors 参数即可:
with open('data.txt', encoding='utf-8', errors='replace') as f:- 避免因个别坏字节导致整个文件读取失败










