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

Python读取txt文件报'utf-8' codec can't decode byte 0xd5错误如何解决

报错含义

这个报错是Python的字符解码异常,意思是程序使用utf-8编码规则解析目标文件的二进制内容时,在内容的第18个字节位置遇到了值为0xd5的字节,该字节不符合utf-8编码的字符规则,无法被正常解码为文本。

报错原因

你两次运行代码指定的都是utf-8编码(首次运行不指定encoding参数时,Python默认会使用当前系统的默认编码,大部分设备默认编码就是utf-8),但目标txt文件本身并不是以utf-8编码保存的:

  • 如果是中文场景下生成的txt,大概率是用GBK、GB2312编码保存的,0xd5刚好是GBK编码中很多中文字符的首字节,在utf-8规则中属于非法字节
  • 少数情况也可能是文件本身损坏,或者是Latin1、cp1252等其他区域编码的文件
解决方案
  • 优先尝试替换编码参数:如果是中文环境下的文件,先把encoding参数改为GBK重试:
with open(apple, encoding='gbk') as f:
    print(f.read())
  • 不确定文件编码时,可以使用chardet库自动检测编码:
    1. 先安装依赖:pip install chardet
    2. 运行检测代码:
import chardet
with open(apple, 'rb') as f:
    # 读取前1024个字节检测编码,大文件可以适当调大读取长度
    result = chardet.detect(f.read(1024))
print(result['encoding']) # 输出检测到的编码,替换到open的encoding参数即可
  • 无需严格保证内容完整性时,可以添加错误处理参数跳过解码异常:
# ignore表示直接忽略无法解码的字节,replace表示用�替换无法解码的字符
with open(apple, encoding='utf-8', errors='ignore') as f:
    print(f.read())
  • 不需要即时转文本的场景,也可以用二进制模式直接读取文件内容自行处理:
with open(apple, 'rb') as f:
    content = f.read()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:27:00