xueqianban
xueqianban copied to clipboard
NodeJS 写的 csv 文件 Excel 打开是乱码
在使用 Node.js 写一个包含中文内容的 csv 文件时, 用 UltraEdit 打开是正常的, 没有乱码. 但使用 Microsoft Excel 打开时, 就是一坨乱码.
真是郁闷, 肯定是掉坑里面了, 让我们查查资料看看, 想必碰到这个问题的人不止我一个.
-
// 解决excel打开内容乱码 var dataBuffer = Buffer.concat([new Buffer('\xEF\xBB\xBF', 'binary'), new Buffer(data)]);
-
由于 node.js 只支持 ascii、utf8、base64、binary 编码方式, 不支持 MS 的 utf-8 + BOM 格式, 所以 excel 打开中文乱码
解决方法已经很明显了,既然excel需要BOM,每次写入数据前先加入一个BOM就可以了嘛。utf-8对应的BOM是
EF BB BF
用上面提到代码果然就解决了乱码问题.
var fs = require('fs');
var content = '中文1,a1,b1,123\n中文2,a2,b2,456';
var msExcelBuffer = Buffer.concat([
new Buffer('\xEF\xBB\xBF', 'binary'),
new Buffer(content)
]);
fs.writeFileSync('test.csv', msExcelBuffer);
// 直接写入 csv, 使用 excel 打开会是乱码
// fs.writeFileSync('test.csv', content);
完美解决我的问题
刚好搜到解决办法,通常别人推荐使用iconv-lite
,这个则是说明了问题的原因,赞
赞赞赞