CSV 中的中文变成乱码或问号:原因与解决办法
你导出客户名单,在另一个程序中打开时,“王小明”却变成乱码或一串问号。 数据不一定损坏,通常只是程序读取字节时所用的字符编码与写入时不同。
更新于:
乱码的根源是写入和读取同一个中文字符时使用了不同编码
CSV 是纯文本,本身通常不说明字符采用哪种编码。 如今多数程序写入 UTF-8,一个汉字由多个字节表示。 中国大陆较旧的 Windows 程序则常用 GBK,而旧版 Excel 也可能依据系统代码页来猜测。
把 UTF-8 当成 GBK 读取时,中文会变成无法理解的字符组合。 反过来把 GBK 当成 UTF-8 时,其中的字节无效,通常会显示问号、替代符号或乱码。
在网页导出、旧版 Excel 保存和分隔符判断中常见的场景
网店、CRM 或网页表单导出 UTF-8,但双击文件后 Excel 用旧代码页打开,中文便显示错误。 有些 Excel 版本只有在文件开头带有不可见的字节顺序标记时,才会自动识别 UTF-8。
相反情况也会发生:Excel 按传统 CSV 保存出 GBK 文件,新闻邮件工具或脚本却按 UTF-8 导入,于是姓名变成问号。
分隔符也会造成类似的表象。 如果 Excel 对逗号、分号或制表符判断错误,所有字段可能挤在一列中,但这不是字符编码损坏。
不要直接双击,而是在 Excel 中明确以 UTF-8 正确导入文件
不要双击文件,而要执行导入。 这样 Excel 会让你选择编码和分隔符,而不是自行猜测。
- 在 Excel 中打开一个空白工作簿。
- 选择“数据”,再选择“从文本/CSV”,然后选取文件。
- 把“文件原始格式”设为“65001: Unicode (UTF-8)”,并检查预览中的王小明是否正常。
- 如果各列尚未分开,选择正确的分隔符,然后加载数据。
- 以后保存时选择“CSV UTF-8”,让下一个程序正确读取。
通过 Excel 导入流程把使用 GBK 的旧式 CSV 转成 UTF-8
如果旧文件使用 GBK,最可靠的主流程仍是在 Excel 导入时明确选择 GBK 或相应中文代码页,再另存为 CSV UTF-8。 数据格式转换器只会先尝试 UTF-8,并在失败时回退到 Windows-1252;它不能读取 GBK,因此不要用它修复这类中文 CSV。 对有效的 UTF-8 或 Windows-1252 文件,它可以输出 CSV、JSON 等 UTF-8 格式,并自动识别逗号、分号和制表符。
反复以错误方向转换同一个文件可能永久破坏文本。 因此务必从最初导出的文件开始,并先保留副本。
转换完成后比较关键字段,确认编码以外的内容完全没有改变
转换后应确认改变的只有编码而非数据内容。 可以按客户编号等关键列,用文档比较工具比较两个 CSV 文件;它会列出变动的单元格、新增行和缺失行,让错误导入在名单投入使用前暴露出来。
