You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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编码字节,对应字符为右单引号’,选错了解码用的编码格式才是触发问题的根本原因。
解决方案

根据实际需求二选一即可:

  1. 如果目标是把这串字节正确解码为对应字符,直接使用匹配的UTF-8编码解码:
    s1 = b'\xe2\x80\x99'
    print(s1.decode("utf-8"))
    # 运行输出:’
    
  2. 如果确实需要按UTF-16LE规则处理存在截断的字节流,可以给decode()方法传入错误处理参数,避免程序直接崩溃:
    s1 = b'\xe2\x80\x99'
    # 无法解码的截断字节会用�替换
    print(s1.decode("utf-16-le", errors="replace"))
    # 运行输出:肙�
    
    常用的错误处理参数还有ignore(直接跳过无法解码的字节,不输出对应内容),可以根据业务场景选择。

内容的提问来源于stack exchange,提问作者Cardstdani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:36:27