Pandas 1.3.x下read_csv报UTF-8解码错误低版本正常问题咨询
问题产生原因
- Pandas 1.3.0版本对
read_csv方法的编码校验逻辑做了破坏性变更:1.2.5及更早版本在未显式指定encoding参数时,对UTF-8解码的容错度更高,遇到少量不符合UTF-8编码规范的字节序列时会自动跳过异常片段完成解析;1.3.x版本收紧了校验规则,采用严格UTF-8解码模式,只要存在非法字节就直接抛出UnicodeDecodeError。 - 目标文件本身并非严格UTF-8编码,文件中包含少量符合CP1252编码规范的特殊字符(多为西欧语言重音符号、欧元符号等区域特有的字符),1.2.x版本的宽松校验恰好兼容了这部分异常字符,因此可以正常读取;1.3.x的严格校验无法兼容,因此触发解码报错。通过open函数打开识别为UTF-8,大概率是检测工具对混合少量异常字节的文件产生了误判。
同类问题说明
该问题属于Pandas 1.3.x版本的已知兼容性问题,有大量处理非严格UTF-8编码CSV文件的用户反馈过同类报错,尤其是处理欧洲区域生成的CSV文件的场景下,该问题触发频率较高。
可行解决方案
- 优先采用显式指定编码的方式,即已验证可正常运行的写法:
pd.read_csv('file.csv', decimal= ",", sep=';', encoding='cp1252')
该方案不会出现字符乱码,稳定性最高。
- 若无法确定文件准确编码,可通过指定
errors参数降低解码容错等级:
pd.read_csv('file.csv', decimal= ",", sep=';', encoding='utf-8', errors='replace')
异常字节会被统一替换为�占位符,不会触发解码报错,但可能存在少量字符乱码的风险。
内容的提问来源于stack exchange,提问作者Tomás Lucas
相关产品推荐
相关产品推荐

