读 CSV 中文乱码怎么办?encoding 参数怎么选?
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
乱码根因:文件编码与读取编码不一致。 中文 CSV 常见三种编码:
| 编码 | 场景 |
|---|---|
| utf-8 | 现代默认;Excel 另存为的 CSV 常是它 |
| utf-8-sig | 带 BOM 的 UTF-8(Windows/Excel 保存的中文 CSV 最常见) |
| gbk / gb18030 | 老 Windows 系统(简体中文)默认 ANSI 编码 |
解决方案:依次试三种,直到中文正常:
df = pd.read_csv("data.csv", encoding="utf-8-sig") # 第一优先试
df = pd.read_csv("data.csv", encoding="utf-8")
df = pd.read_csv("data.csv", encoding="gbk")
不确定编码时,先探测:
# 命令行
file data.csv
# Python:chardet 自动检测(装 pip install chardet)
import chardet
with open("data.csv", "rb") as f:
print(chardet.detect(f.read(10000)))
其他常见读取参数:
pd.read_csv("data.csv",
encoding="utf-8-sig",
sep=",", # 分隔符(制表符用 " ")
header=0, # 第 0 行是表头;无表头用 None
usecols=["id", "sales"], # 只读需要的列(省内存)
dtype={"id": str}, # 防止 001 被读成 1
parse_dates=["date"]) # 自动解析日期列
保存也别忘了编码: df.to_csv("out.csv", index=False, encoding="utf-8-sig")——utf-8-sig 写出的文件 Excel 打开不乱码。
回复
0 条回复