如何通过pd.read_csv与pd.to_csv统一不同来源文件的编码?
解决葡萄牙语词汇CSV导出编码乱码问题
问题根源
你遇到的情况本质是编码识别冲突:
- 用纯UTF-8导出CSV时,Windows自带记事本、部分旧版Excel会默认以**latin1(ANSI)**编码打开,把UTF-8格式的
é(二进制C3 A9)解析成latin1的Ã+©,就出现了assembléia的乱码。 - 改用latin1导出虽能让这个词正常显示,但latin1仅支持256个字符,遇到其他文件里的特殊Unicode字符(比如生僻葡语词汇、跨语言字符)就会触发
UnicodeEncodeError。
统一解决方案:用UTF-8带BOM导出
最稳妥的统一方法是用**utf-8-sig**编码导出CSV,它会在文件开头添加BOM标记,让Windows的阅读器(记事本、Excel)能正确识别这是UTF-8编码,同时兼容所有Unicode字符,不会出现编码错误。
修改后的示例代码
import pandas as pd data = {'Palavra': ['assembléia']} df = pd.DataFrame(data) nome_arquivo_csv = r'C:\Users\user\OneDrive\Documents\cv - general\palavra_assembleia.csv' # 指定utf-8-sig编码导出 df.to_csv(nome_arquivo_csv, index=False, encoding='utf-8-sig')
配套的读取统一规则
读取不同来源的文件时,也统一编码处理:
- 优先用
encoding='utf-8'读取,若报错则尝试encoding='utf-8-sig'; - 如果还是读取失败,再尝试
encoding='latin1'读取,读取后DataFrame会自动转成Unicode存储,后续导出时依然用utf-8-sig即可,不会再触发编码错误。
验证效果
用utf-8-sig导出的CSV:
- 用Windows记事本打开能正常显示
assembléia; - 用Excel打开会自动识别编码,无需手动选择;
- 处理包含特殊Unicode字符的其他文件时,不会出现
UnicodeEncodeError。
内容的提问来源于stack exchange,提问作者user202135
相关产品推荐
相关产品推荐

