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

Python 3.9中扩展ASCII十六进制字符串解码错误求助

解决Python中扩展ASCII十六进制字符串转字符的问题

你的问题出在默认用utf-8解码字节,但utf-8不支持0x80-0xFF范围的单字节扩展ASCII字符——这些字节不是合法的utf-8编码单元,所以会抛出解码异常。要处理全范围0x00-0xFF的十六进制字符串转对应字符,有两种直接的解决方案:

方案1:使用latin-1编码解码

latin-1(也叫ISO-8859-1)编码对每个0x00到0xFF的字节,都直接映射到Unicode中对应的码点,完美匹配扩展ASCII的需求:

# 处理0-127范围的字符
d1 = "5E"       # ^
bytes_array = bytes.fromhex(d1)
value = bytes_array.decode('latin-1')
print(value)  # 输出^

# 处理0xA6这类扩展ASCII字符
d2 = "A6"       # ¦
bytes_array = bytes.fromhex(d2)
value = bytes_array.decode('latin-1')
print(value)  # 输出¦

方案2:使用cp1252编码解码

如果你的字符是Windows环境下的扩展ASCII,cp1252(Windows-1252)是更贴合的选择,它在latin-1基础上补充了一些特殊字符,对于0xA6这类字符,结果和latin-1一致:

d2 = "A6"
bytes_array = bytes.fromhex(d2)
value = bytes_array.decode('cp1252')
print(value)  # 输出¦

关键说明

  • utf-8是多字节编码,仅0x00-0x7F的单字节和ASCII兼容,0x80以上的字节需要和其他字节组合成合法的utf-8序列,单独解码会报错。
  • latin-1和cp1252都是单字节编码,能直接将每个字节转换为对应字符,覆盖你需要的全范围十六进制值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:01:35