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

Python中UnicodeDecodeError:utf-8编解码器无法解码字节0x96的解决方法求助

解决UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96的问题

你的报错栈已经明确指向问题根源:Jinja2加载模板文件时的编码不匹配。模板文件(template_file)并非UTF-8编码,其中的0x96字节(对应Windows-1252编码里的长破折号–)在UTF-8规则中属于无效起始字节,导致解码失败。

下面是针对性的解决方案:

1. 给Jinja2环境指定正确编码

初始化Jinja2的Environment时,直接添加encoding参数,指定模板文件的实际编码(大概率是windows-1252,因为0x96是该编码的典型特殊字符):

# 修改Jinja2环境初始化代码
env = Environment(loader=FileSystemLoader('.'), encoding='windows-1252')

2. 统一处理输入文档的编码

你读取源文档in_doc时使用了Python默认的UTF-8编码,如果该文档也是非UTF-8格式,后续处理也可能触发编码错误,建议同步指定编码:

# 修改读取in_doc的代码
with open(in_doc, encoding='windows-1252') as f:
    all_content = f.readlines()

3. 精准检测文件编码(可选但推荐)

如果你不确定文件的实际编码,可用chardet库做自动检测:

  • 先安装依赖:pip install chardet
  • 编写检测代码:
import chardet

# 检测模板文件编码
with open(template_file, 'rb') as f:
    detect_result = chardet.detect(f.read())
print(detect_result['encoding'])  # 输出类似'Windows-1252'的编码名称

将检测到的编码替换到上述代码的encoding参数中即可。

补充说明

0x96字节的编码差异:

  • 在Windows-1252编码中,它代表长破折号–
  • 但UTF-8编码的有效起始字节范围是0x00-0x7F(ASCII字符)或0xC2-0xF4,0x96不在此范围内,因此UTF-8解码器会抛出错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:59:08