Excel 中文 CSV 乱码:UTF-8、GBK 与正确导入

表格纸与放大镜
本文目录

中文 CSV 打开后出现乱码,先保留一份未经修改的原文件。文件中的文字字节可能是正确的,只是 Excel 用了错误的字符编码来解释。把乱码再次保存并覆盖原文件,会让恢复变得更困难。

CSV 保存的是文字和分隔符。文件名不能可靠地说明它采用什么编码,也不能像 Excel 工作簿一样保留工作表格式。正确读取字节是第一步;在表格中保留编号、日期等数据,则是另一项检查。

选择文件实际使用的编码

UTF-8 广泛用于现代文本交换。中国大陆的一些旧系统可能导出 GBK 或相关中文编码,部分繁体中文文件则使用 Big5。但看到繁体字,并不能证明文件采用 Big5;Unicode 文件同样可以包含简体字或繁体字。

条件允许时,先向发送方确认导出编码。无法确认时,依次用候选编码预览,检查真实词语、较少见的姓名和标点。解码器没有报错,只说明它接受了这些字节,不代表选对了编码。

示意图: 中文: UTF-8 E4 B8 AD E6 96 87; GBK D6 D0 CE C4

使用 Excel 的文本导入预览

不要只依赖双击打开,可以使用 Excel 的文本或 CSV 导入功能。当前桌面版通常可从“数据”选项卡进入文本/CSV 导入,选择源编码和分隔符,再检查预览后加载表格。不同版本和界面语言的菜单名称可能不同。

UTF-8 的字节顺序标记 BOM 可以帮助 Excel 在直接打开文件时识别 UTF-8。它位于文件开头,是编码标记,不属于第一列的名称。另一些接收系统要求不带 BOM 的 UTF-8,因此应按下一步使用文件的应用选择输出形式。

把可读的预览转换为 UTF-8

  1. 把不超过 5 MB 的文件副本放入中文文件编码转换器。
  2. 选择实际源编码,阅读预览。
  3. 检查几处中文姓名或描述,不只检查表头。
  4. 导出 UTF-8,并按接收应用的需要选择是否添加 BOM。
  5. 重新打开导出的文件,把有代表性的几行与原始内容对照。

修改扩展名或添加 BOM,并不能把 GBK 字节转换成 UTF-8 字节。正确转换需要先按源编码解读文字,再把这些文字编码成目标格式。

保护前导零和长编号

中文显示正确以后,Excel 仍可能把编号识别成数字或日期。导入时,把相应列设置为文本。作为标识符的 001234 应保留六个字符;变成 1234 就丢失了信息。

全角与半角差异也可能影响导入后的匹配。如果一个文件写着 A123,另一个写着 A123,可以针对该字段进行全角半角转换。这不能修复编码问题,也不应不加区分地用于全部正文。

区分三种常见现象

看到的现象先检查什么
中文姓名变成无关符号源字符编码
文字可读,却全挤在一列分隔符与引号处理
001234 变成 1234列的数据类型

这些问题可以同时出现,但原因不同。导入器按逗号分列时,单纯选 UTF-8 不会把用分号分隔的文件正确拆列。选择分隔符,也不能恢复被错误解码的汉字。将列设为文本可以保护编号,却不能据此确定原文件的编码。

按这个顺序看预览:文字是否可读、字段边界是否正确、列类型是否合适。抽查的行应包含中文、以零开头的编号和带标点的字段。只有 ASCII 字母的表头,在多种编码下都可能看起来正常,不能用它证明整份文件正确。

保留一小组对照样本

测试文件可以使用姓名、编号和备注三个字段。姓名用 李明,编号用 001234,备注用一句简短中文。这是演示内容,不是真实客户记录。把预期文字与测试文件放在一起,方便每次导入或导出后核对相同的值。

字段包含文件分隔符或内部换行时,CSV 写入程序需要正确使用引号。因此,文本行数不一定等于数据记录数:一个带引号的单元格也可以包含换行。检查导出结果时,应比较实际解析出的行和列,不能只因可见行数看起来合理,就认定文件完整。

转换为 UTF-8 后,用明确指定的 UTF-8 设置重新打开新文件,并核对样本值。接着,在真正接收该文件的应用中测试导入。编码正确的文件,仍可能使用接收流程不接受的分隔符或列顺序。

按下一步用途选择输出

对于一些直接打开 CSV 的 Excel 流程,带 BOM 的 UTF-8 有助于识别编码。另一个导入器则可能要求不带 BOM 的 UTF-8。两者没有适用于所有场景的优劣之分;按接收应用的要求输出,并用同一组代表性数据测试。

BOM 不能修复导出前就已经错误解码的文字。预览中的字符不对时,应先停止保存,调整源编码选择。给错误文字添加 UTF-8 标记,只会生成一份仍然包含错误文字的新文件。

如果需要保留公式、多张工作表、单元格样式或复杂表格结构,CSV 不能替代工作簿。这些功能重要时,应把工作簿作为工作文件,只为特定数据传递环节导出 CSV。文字转换成功,并不代表全部电子表格功能都得到保留。

识别已经丢失的信息

如果保存后的文件已经用替代字符或普通问号取代原来的汉字,换一种编码未必能够恢复。应回到未经修改的原文件,或请发送方重新导出。转换器可以重新解释现存字节,却不能重建已经被覆盖、文件中不再存在的文字。

评论

加载中…

暂无评论。