DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

读 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 打开不乱码。

下载推广海报

圈内讨论推广海报

《读 CSV 中文乱码怎么办?encoding 参数怎么选?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。