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

Pandas读取CSV遇UnicodeDecodeError,用ISO-8859-1可行存疑

问题分析与解决方案

核心原因

你遇到的问题本质是文件中混入了ASCII编码范围外的字节(0xa0是ISO-8859-1中的不间断空格),而chardet因为文件大部分内容是ASCII,误判了整体编码。对方称未修改编码,大概率是内容层面引入了特殊字符(比如从富文本编辑器复制内容时带进来的),而非编码格式本身变更。

当前方案的安全性

用encoding='ISO-8859-1'是可行的临时方案,原因如下:

  • ISO-8859-1是单字节编码,能覆盖所有0x00-0xFF的字节,不会出现解码报错
  • ASCII是ISO-8859-1的子集,之前的CSV文件用它读取完全兼容,不会破坏原有内容

但要注意:0xa0这类字符读入后会变成Unicode的\xa0,如果后续需要处理文本(比如匹配、入库),建议把它替换成普通空格:

import pandas as pd

df = pd.read_csv('your_file.csv', encoding='ISO-8859-1')
# 替换所有不间断空格为普通空格
df = df.replace(r'\xa0', ' ', regex=True)

长期优化建议

  1. 定位特殊字符来源
    找到报错位置的字符(用open('your_file.csv', 'rb').read()[208420:208430]查看附近字节),把这个字符的内容反馈给对方,确认是不是业务内容里的合理字符,还是误引入的垃圾字符。

  2. 推动统一编码为UTF-8
    建议对方导出CSV时明确选择UTF-8编码(很多工具默认是本地编码,比如Windows的GBK),UTF-8是通用编码,能兼容所有语言字符,从根源避免编码问题。

  3. 添加容错读取逻辑
    为了避免后续再出类似问题,可以在代码里加一个 fallback 机制:

def read_csv_safe(file_path):
    try:
        # 先尝试原方式读取
        return pd.read_csv(file_path)
    except UnicodeDecodeError:
        # 报错时切换到ISO-8859-1,并记录日志
        print(f"Warning: File {file_path} has non-ASCII bytes, using ISO-8859-1 encoding")
        return pd.read_csv(file_path, encoding='ISO-8859-1')

df = read_csv_safe('your_file.csv')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:12:42