Pandas读取CSV编码异常:同Windows-1252编码文件为何需单独指定编码
pandas读取同编码CSV文件报错差异的原因
- 首先明确
pd.read_csv()的默认编码规则:
未显式指定encoding参数时,pandas 2.0及以上版本统一使用UTF-8作为默认编码;2.0以下版本会调用运行环境的默认编码,Windows环境默认为Windows-1252(cp1252),macOS/Linux环境默认为UTF-8。 - 两份同为Windows-1252编码的文件表现不同的核心原因是字符覆盖范围不同:
- 无需指定编码就能正常读取的文件,所有字符都落在ASCII兼容区间(0x00~0x7F),该区间的字符在UTF-8、Windows-1252、ASCII三种编码下的编码结果完全一致,因此哪怕使用UTF-8作为默认编码解码也不会触发错误。
- 必须指定编码才能读取的文件,包含了Windows-1252的扩展区间字符(0x80~0xFF,例如欧元符号€、带重音的西欧字符á/é/ñ、特殊标点•等),这些字符的编码值不符合UTF-8的编码规则,默认用UTF-8解码时会抛出
UnicodeDecodeError,必须显式指定encoding='cp1252'才能正确解析。
验证方法:可以用文本编辑器打开报错的文件,查找是否存在非英文、非数字的特殊字符,这类字符就是触发解码错误的根源。
内容的提问来源于stack exchange,提问作者rrmr
相关产品推荐
相关产品推荐

