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

Python3中UnicodeDecodeError报错及字符串转字节值方法咨询

解决Python字节与字符串转换的UnicodeDecodeError问题

Hey 兄弟,我来帮你搞定这个问题!你遇到的UnicodeDecodeError是因为默认用utf-8解码时,0x97这个字节在UTF-8编码规则里不是有效的起始字节,所以直接decode()会报错。咱们一步步拆解解决:

先看你的错误场景

执行这段代码时:

b'\x00\x01_\x97'.decode()

触发了如下报错:

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    b'\x00\x01_\x97'.decode()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x97 in position 3: invalid start byte

一、正确把字节解码为字符串

核心问题是你得知道这些字节对应的编码格式。0x97在很多单字节编码里是合法的:

  • 比如Windows常用的cp1252编码中,0x97对应长破折号—,直接指定编码解码就没问题:
    b'\x00\x01_\x97'.decode('cp1252')  # 输出:'\x00\x01_—'
    
  • 如果不确定编码,只是想避免报错继续运行,可以用错误处理参数:
    • 忽略错误字节:
      b'\x00\x01_\x97'.decode('utf-8', errors='ignore')  # 输出:'\x00\x01_'
      
    • 把错误字节替换成占位符�:
      b'\x00\x01_\x97'.decode('utf-8', errors='replace')  # 输出:'\x00\x01_�'
      
  • 另外latin-1编码可以映射所有0-255的字节到Unicode字符,不会报错:
    b'\x00\x01_\x97'.decode('latin-1')  # 输出:'\x00\x01_\x97'
    

二、把字符串转换成对应的字节值

反过来操作的话,同样要指定编码才能得到正确的字节:

  • 常规UTF-8编码转换:
    my_str = "你好,Python"
    byte_data = my_str.encode('utf-8')  # 输出:b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8cPython'
    
  • 如果要得到像你示例里包含0x97的字节,就得用对应的编码(比如cp1252):
    dash_str = "—"
    byte_data = dash_str.encode('cp1252')  # 输出:b'\x97'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:06:59