Python脚本读取含非ASCII字符文件时UnicodeDecodeError问题求助
解决Python读取含非ASCII字符文件时的UnicodeDecodeError问题
问题根源
你遇到的UnicodeDecodeError是因为文件的实际编码并非UTF-8。错误中的字节0xe9对应法语字符é,这个字节在Latin-1(ISO-8859-1)或Windows-1252编码中是有效单字节字符,但不符合UTF-8的编码规则,因此用UTF-8解码会失败。
解决方案
1. 使用匹配的编码读取文件
直接用Latin-1或Windows-1252编码读取文件,这两种编码能完美兼容你的法语文本:
# 使用Latin-1编码读取 with open('data.txt', 'r', encoding='latin-1') as f: data = f.read()
或者针对Windows环境常用的Windows-1252编码:
with open('data.txt', 'r', encoding='cp1252') as f: data = f.read()
2. 自动检测文件编码
如果不确定文件的具体编码,可以用chardet库自动检测:
首先安装库:
pip install chardet
然后运行检测代码:
import chardet with open('data.txt', 'rb') as f: detection_result = chardet.detect(f.read()) print(f"文件编码:{detection_result['encoding']}")
得到编码结果后,替换到open函数的encoding参数中即可正常读取。
3. 转换文件为UTF-8(长期处理方案)
如果希望后续统一用UTF-8格式处理文件,可将原文件转码为UTF-8:
# 读取原编码文件(这里以检测到的latin-1为例) with open('data.txt', 'r', encoding='latin-1') as f: content = f.read() # 写入UTF-8编码的新文件 with open('data_utf8.txt', 'w', encoding='utf-8') as f: f.write(content)
之后直接用UTF-8编码读取新生成的data_utf8.txt即可。
内容的提问来源于stack exchange,提问作者Joshua Rose
相关产品推荐
相关产品推荐

