使用pandas读取CSV文件时该如何选择适配的编码类型?
CSV编码类型的明确判定与选择方法
核心判定逻辑(告别无意义试错)
不需要上来就挨个换编码参数跑读取代码,先按文件生成来源匹配90%以上的场景:
- 老版本Windows Excel(2019及更早版本)导出的CSV:哪怕内容全是英文、数值,优先选
latin1。这类文件实际使用cp1252编码,夹杂的隐式控制字符不在utf-8的映射范围内,用utf-8读取会直接触发解码错误,这也是那份纯英数文件用pandas.read_csv("Data.csv",encoding='latin1')能成功读取的核心原因。 - 脚本、在线工具、2021版之后的Excel、macOS/Linux系统下导出的CSV:优先选
utf-8。 - 带简体中文内容的CSV:国内老Windows系统、国产办公软件导出的文件优先选
gbk;macOS下导出的带中文文件优先选utf-8-sig(解决普通utf-8读取时列名前出现乱码BOM头的问题);繁体中文场景的老系统文件选big5。
常见编码的适用边界与兜底规则
latin1:单字节全映射编码,对所有0-255的字节内容都能完成无报错解码,不会出现程序崩溃的情况,但读取多语言非西欧字符时会出现显示乱码。适合作为纯英数类文件的兜底读取选项,完全适配无多语言内容的CSV场景。utf-8:跨平台兼容度最高的多语言编码,支持所有常见文字内容的读取,是现代场景下的优先选择。utf-8-sig:专门适配带BOM头的utf-8格式文件,避免普通utf-8读取时把BOM头当成普通字符读入列名的问题。gbk/gb2312:仅适配国内老系统导出的简体中文内容CSV,不建议在纯英数场景下使用。
快速排查的实操技巧
- 读文件时如果出现解码报错,不要随机换编码尝试,先看报错提示里指出的非法字节位置,再结合文件来源匹配对应编码即可。
- 对于纯英文、纯数值的无多语言内容CSV,如果反复尝试utf-8都报错,直接用
latin1读取即可,这类文件本身没有多语言显示需求,latin1读取不会出现内容偏差。
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

