
本文目录
中文 CSV 打开后出现乱码,先保留一份未经修改的原文件。文件中的文字字节可能是正确的,只是 Excel 用了错误的字符编码来解释。把乱码再次保存并覆盖原文件,会让恢复变得更困难。
CSV 保存的是文字和分隔符。文件名不能可靠地说明它采用什么编码,也不能像 Excel 工作簿一样保留工作表格式。正确读取字节是第一步;在表格中保留编号、日期等数据,则是另一项检查。
选择文件实际使用的编码
UTF-8 广泛用于现代文本交换。中国大陆的一些旧系统可能导出 GBK 或相关中文编码,部分繁体中文文件则使用 Big5。但看到繁体字,并不能证明文件采用 Big5;Unicode 文件同样可以包含简体字或繁体字。
条件允许时,先向发送方确认导出编码。无法确认时,依次用候选编码预览,检查真实词语、较少见的姓名和标点。解码器没有报错,只说明它接受了这些字节,不代表选对了编码。
使用 Excel 的文本导入预览
不要只依赖双击打开,可以使用 Excel 的文本或 CSV 导入功能。当前桌面版通常可从“数据”选项卡进入文本/CSV 导入,选择源编码和分隔符,再检查预览后加载表格。不同版本和界面语言的菜单名称可能不同。
UTF-8 的字节顺序标记 BOM 可以帮助 Excel 在直接打开文件时识别 UTF-8。它位于文件开头,是编码标记,不属于第一列的名称。另一些接收系统要求不带 BOM 的 UTF-8,因此应按下一步使用文件的应用选择输出形式。
把可读的预览转换为 UTF-8
- 把不超过 5 MB 的文件副本放入中文文件编码转换器。
- 选择实际源编码,阅读预览。
- 检查几处中文姓名或描述,不只检查表头。
- 导出 UTF-8,并按接收应用的需要选择是否添加 BOM。
- 重新打开导出的文件,把有代表性的几行与原始内容对照。
修改扩展名或添加 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。文字转换成功,并不代表全部电子表格功能都得到保留。
识别已经丢失的信息
如果保存后的文件已经用替代字符或普通问号取代原来的汉字,换一种编码未必能够恢复。应回到未经修改的原文件,或请发送方重新导出。转换器可以重新解释现存字节,却不能重建已经被覆盖、文件中不再存在的文字。
评论
加载中…
暂无评论。