指南
CSV 用 Excel 打开是乱码?3 种解决方法,身份证号也不变形
更新于 2026-10-13
从网站后台、数据库或别的系统导出的 CSV,双击用 Excel 打开,中文变成一堆「鍦烘櫙」「娴嬭瘯」之类的乱码;或者中文没问题,身份证号却变成了 1.23457E+17。这是两个不同的问题,下面分开说。
为什么会乱码
CSV 是纯文本,文件里不记录自己用的是什么编码。Excel 双击打开 CSV 时,按系统默认编码去读,简体中文 Windows 一般是 GBK。
而现在大多数网站、数据库和程序导出的 CSV 是 UTF-8。如果文件开头没有 BOM 标记,Excel 就会把 UTF-8 当成 GBK 来读,于是满屏乱码。反过来,GBK 编码的 CSV 在英文系统的 Excel 里打开也会乱码。
方法 1:用「从文本/CSV」导入,手动指定编码
- 新建一个空白工作簿,点「数据 → 从文本/CSV」,选中 CSV 文件;
- 在预览窗口的「文件原始格式」里选「65001: Unicode (UTF-8)」;如果还是乱码,再试简体中文(936);
- 预览正常后点「加载」。有长数字列时先点「转换数据」,把那一列的类型改成「文本」,再加载。
这个方法不改原文件,每次打开都要重复一遍。
方法 2:给文件加上 BOM,以后双击就正常
- 用记事本打开 CSV;
- 「文件 → 另存为」,编码选「带有 BOM 的 UTF-8」,保存;
- 之后双击用 Excel 打开就不会乱码了。
如果 CSV 是你自己用 Excel 导出的,另存为时选「CSV UTF-8(逗号分隔)」,别人打开也不会乱码。
身份证号、订单号变成 1.23E+17 或后几位变 0
这是另一个问题:Excel 把长串数字当成数值,而数值最多只保留 15 位有效数字。
- 18 位身份证号、19 位订单号超过 15 位的部分会变成 0,显示成科学计数法;
- 以 0 开头的编号(如
00123)会丢掉前导 0。
双击打开的那一刻数字就已经被转换了,保存之后多出的位数永久丢失,只能回到原始 CSV 重新导入。导入时把这些列设成「文本」(方法 1 的第 3 步)才能保住。
方法 3:一键转换成 xlsx
xlszip 格式转换把这些事一次做完:
- 自动识别编码:按 UTF-8、GBK(GB18030)、Big5 依次尝试,繁体中文的 CSV 也能处理;
- 自动识别逗号、制表符、分号、竖线分隔;
- 超过 15 位的数字、以 0 开头的编号、像科学计数法的值都按文本保留,不会丢位;
- 输出标准 xlsx,也可以选择输出带 BOM 的 UTF-8 CSV,Excel 双击直接打开。
旧版 .xls、.xlsb、.ods 也可以在同一个页面转成 .xlsx。