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
相关产品推荐
相关产品推荐

