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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:15:04