让 Excel 支持打开 CSV 不乱码
2018年04月07日
当用程序导出UTF-8
编码的CSV
格式的文件时,通常用Mac
中的Numbers
打开是正常的,但是用Excel
打开时,中文就会变成乱码。
原因如下:
Excel
本身是对应了UTF-8
编码的,但当CSV
文件是UTF-8
编码时,原封不动的双击打开CSV
文件时,Excel
是无法识别为UTF-8
的,而是按照系统默认字符ANSI
(简体中文GB2312
、日文Shift_JIS
)来处理的就乱码了。所以根本原因是Excel
字符集识别的问题。
解决办法如下:
在CSV
文件头部添加BOM(Byte order mark)
即可,添加之后Excel
便可以识别此文件是UTF-8
编码了。
带
BOM
的文件会比不带BOM
的文件多出 3 个字节,这三个字节是固定的:0xEF 0xBB 0xBF
,其Unicode
为\uFEFF
。
JavaScript
代码:
1function addBom(csv) { 2 const bom = Buffer.from('\uFEFF'); 3 const csvBuf = Buffer.from(csv); 4 return Buffer.concat([bom, csvBuf]).toString(); 5}
参考: