让 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}
参考: