指南

CSV文件打开是乱码?原因和修复方法

Opener 团队阅读约 6 分钟

“é”或“Сума”这样的乱码,说明 CSV 以一种文本编码保存,却被当作另一种编码打开了——文字其实还在文件里,只是被错误地解码了。用正确的编码打开它(CSV 查看器会自动识别),再保存一份 UTF-8 副本即可。问号(“????”)则是另一回事:它通常意味着文件在写入时文字就已经丢失了。

一分钟搞懂什么是编码

CSV 文件是纯文本,而文本在磁盘上只是一串数字(字节)。编码就是一张对照表,规定哪个数字代表哪个字符。对于基本的英文字母和数字,几乎所有编码都一致,这就是为什么银行导出文件里的数字显示正常,而姓名和摘要却变成了乱码。

在财务软件和银行的导出文件中,你最常遇到的三种编码是:

中文文件还常用另一种旧编码:GBK(以及它的扩展 GB18030)。旧版中文 Windows 和很多国内软件默认用它保存 CSV。Opener 不会自动识别 GBK,这类文件请使用下面方法 2 和方法 3 中介绍的 Excel、LibreOffice 或文本编辑器。

文件本身通常不会注明它用的是哪种编码。打开它的程序只能去猜,一旦猜错,就会出现乱码——技术上叫作 mojibake。

读懂乱码:每种模式说明了什么

乱码的样子,就是判断问题出在哪里的线索。

你看到的 本应显示 发生了什么
é, ü, € é, ü, € UTF-8 文件被当作 Windows-1252 打开
Сума(大量 Ð 和 Ñ) Сума UTF-8 编码的西里尔文字被当作 Windows-1252 打开
Ñóìà(带重音的拉丁字母) Сума Windows-1251 文件被当作 Windows-1252 打开
Cafй Café Windows-1252 文件被当作 Windows-1251 打开
�(带问号的黑色菱形) 任意字符 旧编码文件被当作 UTF-8 打开
???? 任意字符 文件保存时文字已丢失

“Ô加另一个字符,或者“Д/“Ñ”加另一个字符这样成对出现,是 UTF-8 被当作旧编码读取的典型特征:每个非英文字母在 UTF-8 中占两个字节,而旧的对照表把每个字节显示成一个单独的符号。这是好消息——什么都没丢,用 UTF-8 打开就能恢复。

单纯的问号则是坏消息。它们通常出现在这样的情况:程序试图用一种根本没有这些字符位置的编码保存文本(比如把西里尔文字存成 Windows-1252),于是把每个字符都替换成了 ?。原来的文字已经不在文件里了,任何查看器都无法找回。解决办法是从源系统重新导出,如果导出对话框提供选项,选择 UTF-8 或正确的地区编码。

BOM:为什么 Excel 会把 UTF-8 读错

UTF-8 文件开头可能有三个看不见的字节,叫作字节顺序标记(BOM)。它是一个提示,表示“这个文件是 UTF-8”。

双击 CSV 时,Excel 非常依赖这个提示。有 BOM 时,它通常能正确读取 UTF-8;没有 BOM 时,它往往会假定文件使用你电脑上的旧编码——银行导出的一份完全正常的 UTF-8 文件,就是这样变成“Сума”的。其他程序则恰恰相反,会把 BOM 显示成第一列表头开头的  之类的乱码。如果你看到这个,说明文件是 UTF-8,只是 BOM 被当成文字显示出来了。

方法 1:用能自动识别编码的工具打开

最快的办法是让工具替你识别编码。Opener 的 CSV 查看器会优先尝试 UTF-8,不行再根据文本回退到 Windows-1251 或 Windows-1252,所以姓名和摘要都能正确显示,不需要导入向导。它还会识别分隔符——逗号、分号、制表符或竖线。

文件在你的浏览器中读取,不会上传到任何地方,这对工资表、发票和银行对账单来说很重要。要为其他程序修好文件,请使用导出按钮:你会得到一份干净的 UTF-8 表格副本(导出的是当前视图,如果需要全部行,请先清空搜索)。如果你的问题是所有内容都挤在一列,而不是文字乱码,请看 CSV 打开后全挤在一列怎么办。

方法 2:在 Excel 中导入并选择正确的“文件原始格式”

不要双击文件。新建一个空白工作簿,使用“数据”选项卡中的“从文本/CSV”导入。预览窗口中有一个文件原始格式列表,可以在这里选择编码:

在这些选项之间切换并观察预览——姓名一显示正常,就说明选对了。然后加载数据。如果需要把文件转发给别人,在 Excel 中另存时请选择“CSV UTF-8”文件类型,而不是普通的“CSV”,后者可能又会使用旧编码。

方法 3:Google 表格、LibreOffice 或文本编辑器

Google 表格。 把 CSV 导入 Google 表格(“文件”→“导入”)对 UTF-8 文件效果很好,导入对话框还可以选择分隔符。但对旧编码文件来说,这条路不太可靠:如果 Windows-1251、Windows-1252 或 GBK 编码的导出文件仍然显示乱码,先用其他方法把它转换成 UTF-8,再导入转换后的副本。

LibreOffice Calc。 打开 CSV 时,LibreOffice 会显示文本导入对话框,其中有一个字符集列表。选择 Unicode (UTF-8)、西里尔文 (Windows-1251)、西欧 (Windows-1252),或者 GBK/GB18030 对应的简体中文字符集,预览会立即更新。它免费,并且支持 Windows、macOS 和 Linux。

文本编辑器。 Windows 上的记事本、macOS 上的“文本编辑”,或者 VS Code 这样的代码编辑器,都可以在保存时选择编码。问题在于:编辑器必须先用正确的编码打开文件。如果文字在编辑器里显示正常,就把它另存为 UTF-8。如果在编辑器里就已经是乱码,保存只会把乱码原样保留——请先用正确的编码重新打开。

常见问题

CSV 里的“????”能修复吗?

通常不能。问号意味着字符在文件写入时就被替换掉了,原来的文字已经不在文件里。请从财务软件或银行重新导出,尽量选择 UTF-8。

保存或导出时应该用哪种编码?

UTF-8。它能存放所有语言的文字,所有现代程序都能识别。如果同事会在 Excel 里双击打开,请使用 Excel 的“CSV UTF-8”选项,这样文件开头会带有 BOM。

更改编码会改变我的数字吗?

不会。数字、小数点和逗号在 UTF-8、Windows-1251 和 Windows-1252 中都是一样的,所以金额和日期不受影响。只有基本英文以外的字符会变化。

在网上修复银行导出文件安全吗?

只有在工具不上传文件的情况下才安全。CSV 查看器完全在你的浏览器中解码和导出文件,对账单永远不会离开你的设备。