Python调用decode()以utf-16-le解码bytes报UnicodeDecodeError截断错误
问题根源
报错核心是编码规则和输入字节不匹配:
- UTF-16LE是双字节对齐的编码格式,每1个字符对应2个字节的编码单元,你传入的字节对象
b'\xe2\x80\x99'总长度为3字节,本身就不满足UTF-16LE的长度要求。 - 解码时前2个字节
\xe2\x80会被识别为第一个完整字符,剩余单独1个字节\x99无法凑成合法的双字节编码单元,因此抛出「数据截断」的解码错误,不存在字节内容损坏的问题。 - 额外说明:
b'\xe2\x80\x99'本身是完全合法的UTF-8编码字节,对应字符为右单引号’,选错了解码用的编码格式才是触发问题的根本原因。
解决方案
根据实际需求二选一即可:
- 如果目标是把这串字节正确解码为对应字符,直接使用匹配的UTF-8编码解码:
s1 = b'\xe2\x80\x99' print(s1.decode("utf-8")) # 运行输出:’ - 如果确实需要按UTF-16LE规则处理存在截断的字节流,可以给
decode()方法传入错误处理参数,避免程序直接崩溃:
常用的错误处理参数还有s1 = b'\xe2\x80\x99' # 无法解码的截断字节会用�替换 print(s1.decode("utf-16-le", errors="replace")) # 运行输出:肙�ignore(直接跳过无法解码的字节,不输出对应内容),可以根据业务场景选择。
内容的提问来源于stack exchange,提问作者Cardstdani
相关产品推荐
相关产品推荐

