让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}

参考: