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

Python读取CSV文件时'utf-8'解码0xd5无效续字节错误如何解决

错误原因分析

这个报错是编码不匹配导致的,和3.17GB的文件体积完全无关,编码错误只和文件内容的字节格式有关,与文件大小没有任何关联。

你看到的“报错行和上一行内容完全相同”是误解:报错发生在csv.reader读取异常行、尝试解码为字符串的阶段,这一行根本没有被成功解析成列表,你拿到的所谓“触发报错的行”实际是上一次循环存储的正常行内容,所以看起来和上一行完全一致。真实的异常行中存在不符合UTF-8编码规则的字节,0xd5通常是GBK/GB2312编码中的中文字符首字节,也可能是不可见的特殊控制符、乱码字符。

解决方案

  • 方案1:指定正确的文件编码打开
    大多数Windows系统生成的CSV默认编码不是UTF-8,可尝试替换open语句的编码参数:
    # 尝试GBK编码,适合包含中文的Windows CSV文件
    with open(filename, encoding='gbk') as csvfile:
    # 其他可选编码,报错可依次尝试:
    # encoding='cp1252' 欧美地区常用CSV编码
    # encoding='utf-8-sig' 处理带BOM的UTF-8文件
    
  • 方案2:忽略解码错误
    如果不需要精准保留异常字节的内容,可添加错误处理参数跳过解码异常:
    with open(filename, encoding='utf-8', errors='replace') as csvfile:
    
    遇到无法解码的字节会自动替换为�,不会中断程序运行。
  • 方案3:二进制读取统计行数(适合仅统计行数的场景)
    如果你只需要统计行数,完全不需要用csv.reader解析内容,二进制读取不会触发任何编码问题,大文件下效率高得多:
    def count_lines(filename):
        count = 0
        # 二进制打开无编码问题
        with open(filename, 'rb') as f:
            # 逐行迭代不占内存,适合3GB级大文件
            for line in f:
                count += 1
        # 减1对应你原本跳过表头的逻辑
        return count - 1
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:45:08