ARTICLE · 1280658
CSV 打开乱码,Excel 认不认就看前三个字节
表发过去,隔了两分钟,对面回一句:这怎么打开全是怪字。
四行的订单表,十二列,我这边双击打开清清爽爽,到他电脑上,客户名那列变成一堆缺胳膊少腿的字,金额的千分位也没了。
不是表做坏了,是文件开头的三个字节。
微软自己的支持页面写得挺直白,一份 UTF-8 编码的 CSV,只有存盘的时候带了 BOM,Excel 才会照正常方式打开它。没带的,它就按这台电脑的本地编码去读,中文一读一个错。
所以头一步不是换软件,也不是重做表,先看那三个字节还在不在。

01|三个字节,藏在文件开头
BOM 这名字听着吓人,落到字节上就是三个:EF、BB、BF。
我拿同一张四行的表试了四种存法,字节数差得挺明显。UTF-8 带 BOM,193 个字节;不带 BOM 的,190 个。
GBK,164 个。UTF-16,278 个,每个字母后面还多一个空字节呢。
三个字节在 190 里占多少,连 2% 都不到。
可 Excel 就靠这三个字节认门,认出来了按 UTF-8 读,认不出来就退回本地码表。
拿 GBK 去读那份不带 BOM 的,表头会变成这样:璁㈠崟鍙、瀹㈡埛、閲戦、鏃ユ湡。
原样是订单号、客户、金额、日期,十二个字。
你看那串怪字,笔画都还在,就是拼错了位置。字一个没丢,是解码的钥匙拿错了。

02|照着网上教的另存成 UTF-8,为什么还是乱
这条路我试过,也翻了好几篇教程,基本都写着一句话:用记事本打开,另存为 UTF-8。
问题出在另存对话框里那个编码下拉,里面其实有两个 UTF-8,新版 Windows 记事本默认存出来的,是不带 BOM 那个。也就是说,你照着教程存一遍,文件从 190 个字节还是 190 个字节,Excel 打开照样是怪字吧。
带 BOM 的存出来是 193,多出来那三个字节,才是 Excel 认的那张门票。我核过自己电脑里三个真实导出的表,都是头条后台的搜索数据,开头十二个字节一模一样,ef bb bf。一个 3744 字节,一个 1876 字节,一个 1992 字节。
平台导出这一层,其实早就替你把门票买好了。乱的从来不是平台给的文件,是别人转手发过来的,或者自己用记事本另存过一遍的。
微软给的另一条路更稳,不走双击,走数据页签:数据、获取数据、从文本或 CSV。进去以后有个文件原始格式,选 65001 那一项,中文就对了,这个入口绕开了系统默认,也不改文件本身。
03|已经乱着点过保存了,还能不能救
这一条我专门试了,答案不太好听。
190 个字节的文件,按 GBK 读成怪字,再原样存回去,文件大小还是 190 个字节。我逐字节对了一遍,184 个对得上,6 个字节被替换成了方块。
那 6 处已经不是一个字了,是个占位符,再存十次也变不回原来的笔画。所以更要紧的一句是,看到乱码先别点保存,直接关掉,去源头重新下一份。
只要没存过,文件就是好的,换个人用对的入口打开就能看。存过一遍,那 6 个字节就补不回来了。
04|下次一上手就不乱的顺序
第一步,先看是不是编码问题:整片中文全是怪字,但英文和数字都正常,基本就是编码没对上,不是文件坏了。
第二步,看怪字长什么样。开头多一个锘字,说明文件本身带了 BOM,是打开它的软件没认这个记号,换个软件就行。
第三步,怪字是璁㈠崟这一类,说明文件是不带 BOM 的 UTF-8,得从导入入口进,或者让对方重存一份带 BOM 的。
第四步,如果表里只有个别格子乱,其余都好,那多半是分隔符或引号打架,跟编码没关系。这条我没细测,先不下结论。
有一处我到这会儿也没弄明白。我这台机器上装的是 WPS,没有微软 Office,所以双击之后屏幕上到底怎么显示,我没法亲眼看一眼。上面所有关于字节的判断,是拿脚本一次跑出来的,加上微软支持页那段原文核对的。
界面那一下,得你自己在机器上对。
三个字节。
下拉框里的一项。
存错一次,六个字节就回不来了。















































































