Python读取txt文件首次运行成功后报UnicodeDecodeError错误如何处理?
问题原因
该错误属于文本编码不匹配问题:Python3使用open()读取文本文件时,默认会采用当前系统的默认编码(macOS环境默认编码为utf-8),你要读取的Data_Exercise_1.txt文件实际编码不是utf-8,文件中包含了utf-8编码规则无法识别的字节0x9f,因此触发了解码失败报错。
首次运行成功大概率是首次读取时文件内容刚好没有超出utf-8识别范围的特殊字符,后续文件内容被修改、或者读取的是同名但编码不同的文件,就会触发报错。
解决方法
- 方法1:直接指定常见兼容编码读取
Windows导出的txt文件常用gbk编码,也可以用兼容所有单字节的latin-1编码避免解码报错,只需要给open()增加encoding参数即可:
# 优先尝试gbk编码 with open('/Users/solidaneziri/Downloads/Data_Exercise_1.txt', encoding='gbk') as infile: for line in infile: print(line.split()[0])
如果gbk编码仍然报错,可将参数值替换为encoding='latin-1',该编码可以兼容所有单字节字符,不会抛出解码错误,仅部分特殊字符可能显示乱码,适合临时排查使用。
- 方法2:检测文件真实编码后读取
如果不确定文件编码,可以用chardet库自动检测文件编码:
首先执行安装命令:pip install chardet
再运行检测代码获取真实编码:
import chardet # 二进制模式读取文件内容检测编码 with open('/Users/solidaneziri/Downloads/Data_Exercise_1.txt', 'rb') as f: detect_result = chardet.detect(f.read()) print(detect_result['encoding'])
拿到检测返回的编码值后,替换open()的encoding参数即可。
- 方法3:忽略解码错误
如果对内容完整性要求不高,只需要读取大部分有效内容,可以设置解码错误忽略参数,遇到无法解码的字符直接跳过:
with open('/Users/solidaneziri/Downloads/Data_Exercise_1.txt', encoding='utf-8', errors='ignore') as infile: for line in infile: print(line.split()[0])
内容的提问来源于stack exchange,提问作者nsol
相关产品推荐
相关产品推荐

