xueqianban icon indicating copy to clipboard operation
xueqianban copied to clipboard

NodeJS 写的 csv 文件 Excel 打开是乱码

Open ufologist opened this issue 8 years ago • 3 comments

在使用 Node.js 写一个包含中文内容的 csv 文件时, 用 UltraEdit 打开是正常的, 没有乱码. 但使用 Microsoft Excel 打开时, 就是一坨乱码.

nodejs-csv-ms-excel-messy.png

真是郁闷, 肯定是掉坑里面了, 让我们查查资料看看, 想必碰到这个问题的人不止我一个.

  • NodeJS CSV导出文件名和内容乱码解决

    // 解决excel打开内容乱码
    var dataBuffer = Buffer.concat([new Buffer('\xEF\xBB\xBF', 'binary'), new Buffer(data)]);
    
  • 怎么解决数据保存到csv文件乱码问题

    由于 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);

nodejs-csv-ms-excel-messy-result.png

ufologist avatar Oct 09 '16 02:10 ufologist

完美解决我的问题

jiandandkl avatar Sep 27 '17 09:09 jiandandkl

刚好搜到解决办法,通常别人推荐使用iconv-lite,这个则是说明了问题的原因,赞

oliyg avatar Oct 18 '17 06:10 oliyg

赞赞赞

hhh-design avatar Apr 20 '22 09:04 hhh-design