Node.js Excel中的csv文件中未正确显示重音字符串
我从mysql数据库中读取数据,然后将其保存到csv文件中。我在服务器端进行了检查,文件正确保存为utf8格式。 然后提示用户下载该文件。当我在我的计算机(MacOSX)上下载该文件时,该文件使用utf8是正确的。(使用Termninal中的file命令) 当我在Excel中打开csv文件时,重音字符是错误的。 在Excel中,我有AZERTY√©a而不是AZERTYéa,如果我使用文本编辑器打开文件 以下是我的代码:Node.js Excel中的csv文件中未正确显示重音字符串,node.js,csv,Node.js,Csv,我从mysql数据库中读取数据,然后将其保存到csv文件中。我在服务器端进行了检查,文件正确保存为utf8格式。 然后提示用户下载该文件。当我在我的计算机(MacOSX)上下载该文件时,该文件使用utf8是正确的。(使用Termninal中的file命令) 当我在Excel中打开csv文件时,重音字符是错误的。 在Excel中,我有AZERTY√©a而不是AZERTYéa,如果我使用文本编辑器打开文件 以下是我的代码: // File creation var reportFil
// File creation
var reportFile = Date.now();
fs.closeSync(fs.openSync(__dirname + '/reports/' + reportFile + '.csv', 'w'));
var attributes = [];
var row = [];
fs.appendFileSync(__dirname + '/reports/' + reportFile + '.csv', "\ufeff");
for(var x = 0; x<fields.length; x++) attributes.push(fields[x].name);
fs.appendFile(__dirname + '/reports/' + reportFile + '.csv', attributes.join('|'), function (err) {
if(err) console.log('Error appending fields', err);
fs.appendFileSync(__dirname + '/reports/' + reportFile + '.csv', '\n');
for(var x = 0; x<results.length; x++) {
row = [];
for(var y = 0; y<attributes.length; y++){
row.push(results[x][attributes[y]]);
}
fs.appendFileSync(__dirname + '/reports/' + reportFile + '.csv', row.join('|'));
fs.appendFileSync(__dirname + '/reports/' + reportFile + '.csv', '\n');
}
// file download
req.reportFile = reportFile;
res.setHeader('Content-disposition', 'attachment; filename='+__dirname + '/reports/' + reportFile + '.csv');
res.set('Content-Type', 'text/csv; charset=utf-8');
fs.readFile(__dirname + '/reports/' + reportFile + '.csv', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
console.log(data);
res.header("Access-Control-Allow-Origin", "*");
res.status(200).send(data);
});
});
//文件创建
var reportFile=Date.now();
fs.closeSync(fs.openSync(u dirname+'/reports/'+reportFile+'.csv',w');
var属性=[];
var行=[];
fs.appendFileSync(uu dirname+'/reports/'+reportFile+'.csv',“\ufeff”);
对于(var x=0;x我最终找到了解决方案。发送文件时是BOM问题。我认为它已经设置好了,因为我在编写文件时设置了它
我换了这行
res.status(200).send(data);
到
可能重复的
res.status(200).send('\ufeff'+data);