CSV用Excel打开乱码怎么办|UTF-8(带BOM)与GBK的区分使用
从网站或系统下载的CSV,双击用Excel打开后,“姓名,地址”变成了“濮撳悕,鍦板潃”。这并不是CSV内容坏了,只是Excel认错了字符编码。本文整理了乱码的原因、把现在这个CSV正确打开的方法、以后不再乱码的保存方法(UTF-8带BOM·GBK),以及转换时会丢失的字符。
Excel会把没有BOM的CSV当作GBK读取
现在的网站和系统导出的CSV几乎都是UTF-8。而简体中文版Windows的Excel在双击打开CSV时,如果文件开头没有“这是UTF-8”的标记(BOM),就会按系统的旧编码GBK(代码页936)来读取。用GBK读UTF-8的中文,就会像下面这样乱码。
| 原始内容 | 在Excel中的样子(把UTF-8当作GBK读取) |
|---|---|
| 姓名,地址 | 濮撳悕,鍦板潃 |
| 商品名称,价格 | 鍟嗗搧鍚嶇О,浠锋牸 |
| 张三,北京市海淀区 | 寮犱笁,鍖椾含甯傛捣娣�鍖� |
BOM(字节顺序标记)是放在文件开头的EF BB BF这3个字节,画面上不会显示。有了BOM,Excel就会正确地按UTF-8读取。也就是说,以“UTF-8(带BOM)”保存的CSV,双击打开也不会乱码。只有英文和数字的CSV在UTF-8和GBK里是相同的字节,所以不会乱码,只有包含中文时才乱码,原因也在这里。日文版Windows用Shift_JIS、韩文版用CP949,机制完全相同。
把正在乱码的CSV正确打开的方法
- 1
从Excel的“数据”选项卡导入
打开空白工作簿,在“数据”选项卡 →“从文本/CSV”中选择文件。在预览界面的“文件原始格式”中选“65001: Unicode (UTF-8)”,确认中文显示正常后再导入。
- 2
转换成带BOM的UTF-8后再打开
把文件放进乱码还原·解读工具的“文件·CSV”,会判断字符编码、有无BOM和换行符。选择“UTF-8(带 BOM)”后“转换并保存”,得到的文件双击也能在Excel中正常打开。
- 3
用在线表格打开
WPS表格、Google表格、Mac的Numbers等大多能直接读取UTF-8的CSV。只是查看内容的话这样就够了,但打开GBK的CSV时反而可能乱码。
如果手头只有乱码的文字(CSV内容被直接贴进了邮件等),很遗憾往往无法完全还原。把UTF-8当作GBK读取时,凑不成对的字节会变成“�”被丢弃,像上面“海淀区”那样有些字已经找不回来。请向对方索要原始文件,再用上面的方法打开。
按接收方选择保存方式
| 接收方 | 推荐的字符编码 | 理由 |
|---|---|---|
| 用Windows的Excel打开的人 | UTF-8(带BOM) | 双击不乱码,表情符号和生僻字也能保留 |
| 老旧的业务系统·财务软件导入 | GBK | 导入端往往只能读取GBK |
| 程序·数据库·API | UTF-8(无BOM) | 防止开头的BOM混进第1列的列名 |
| Mac·Google表格 | UTF-8 | 有无BOM都能读取 |
用Excel保存时,在“另存为”的文件类型中选择。“CSV UTF-8(逗号分隔)”保存为带BOM的UTF-8,“CSV(逗号分隔)”在简体中文版Windows中保存为GBK。换行符方面,面向Windows软件用CRLF,面向Mac·Linux或程序用LF。从网页工具导出的CSV,比如用手机计数器统计的交通量调查汇总表,只要是带BOM的UTF-8,也能直接用Excel打开(交通量调查的做法与汇总表的制作)。
转换成GBK时会丢失的字符
UTF-8几乎能表示所有字符,但GBK能表示的字符是有限的。把UTF-8的CSV转换成GBK时,无法表示的字符会变成“?”,而且无法还原。GBK能否表示,大致如下。
| 字符 | 在GBK中 | 备注 |
|---|---|---|
| 常用简体字·繁体字 | 可以表示 | GBK也收录了大量繁体字 |
| ①·é·ü | 可以表示 | 带圈数字和部分拼音字母已收录 |
| 𠮷 等扩展区汉字 | 无法表示 | UTF-8中是4字节的字,常见于生僻姓名 |
| 한국어(韩文) | 无法表示 | 包含韩文姓名时请使用UTF-8 |
| 🍣等表情符号 | 无法表示 | 会变成“?” |
需要GBK的CSV时,请先找出无法表示的字符,按导入端的规则改写或删除后再保存。人名中的生僻字如果被改写,可能会被当作别人处理,最好先与导入端确认。如果导入端支持GB18030,所有汉字和表情符号都能表示,比GBK更安全。
常见问题
- CSV用Excel打开为什么会乱码?
- 因为Excel把以UTF-8保存的CSV当作GBK读取了。简体中文版Windows的Excel会把开头没有BOM的CSV按GBK打开。重新保存为UTF-8(带BOM),或从“数据”选项卡指定编码导入,就不会乱码。
- 带BOM的UTF-8和不带BOM的UTF-8有什么区别?
- 区别在于文件开头有没有EF BB BF这3个字节(BOM)。里面的文字相同,但有BOM时Excel会按UTF-8读取。交给程序或数据库时,BOM可能混进第1列的列名,所以不带BOM更合适。
- 对方要求GBK格式的CSV,怎么转换?
- 在简体中文版Windows的Excel中用“CSV(逗号分隔)”保存,就会是GBK。表情符号、扩展区的生僻字、韩文等GBK中没有的字符会变成“?”,请先修改。如果对方的系统支持GB18030,用它更不容易丢字。
- 在Mac上CSV也乱码。
- Mac版Excel打开没有BOM的UTF-8 CSV时也可能乱码。请从“数据”选项卡指定编码导入,或转换成UTF-8(带BOM)。反过来,Windows导出的GBK CSV用Numbers等以UTF-8为前提的应用打开会乱码,这时请转换成UTF-8。
本文介绍的工具
相关文章
呼吸法怎么做|4-7-8呼吸法、箱式呼吸、共振呼吸的区别与选择
睡不着的夜晚、考试或面试之前、怎么也压不下去的烦躁。别人总说“深呼吸一下”,可到底该吸几秒、呼几秒,又该选哪种呼吸法,其实很少有人说得清。本文以每分钟呼吸次数和“呼气÷吸气”的比例为标准,比较并讲解5种常见呼吸法(4-7-8呼吸法、箱式呼吸、共振呼吸、生理性叹息、腹式呼吸)的秒数与做法。同时整理了呼吸为什么能让人平静下来的原理、睡前、紧张、烦躁等不同场景该怎么选、感到难受时如何调整、安静时呼吸频率的测量方法,以及不适合做呼吸练习的场合。
阅读文章 →全银格式是什么?日本综合转账·工资转账数据的制作方法与 120 字节布局
在日本,公司通过网上银行一次性发起几十笔转账时,银行常会要求“请导入全银格式的文件”。全银格式是日本全国银行协会(全银协)规定的转账数据写法:每行固定 120 字节的定长文本,由表头·数据·尾部·结束四种记录组成。本文按实际工作中容易卡住的顺序,介绍综合转账·工资转账·奖金转账的区别,各记录的项目和位数(第几字节写什么),把收款人名改成半角片假名的规则和「カ)」「(カ」法人略称,邮储银行记号番号的换算,用 Excel·CSV 制作的步骤,以及导入出错的原因和修改方法。
阅读文章 →抽卡概率的计算方法|多少抽能出?保底·歪卡·满命的期望值
以为“出货率 1%,100 抽总该出了”,结果就是没出。这并不是特别倒霉:1% 抽 100 次至少出 1 个的概率本来就只有约 63%。本文用实际算出的数字,整理了“抽 n 次能出的概率”的公式、出货率×抽数速查表、一半的人和 10 人中 9 人出货所需的抽数、有保底和歪卡(大保底)时的平均与最坏抽数、保底计数的继承、满命(7 个)所需的抽数,以及随机吧唧·卡牌集齐全套要买几个。
阅读文章 →