重音字符串在Excel中的csv文件中无法正确显示

时间:2018-03-26 14:10:00

标签: node.js csv

我从mysql数据库中读取数据,然后将其保存到csv文件中。我检查了服务器端,文件是用utf8格式正确保存的。 然后提示用户下载文件。当我在我的计算机(MacOSX)上下载文件时,使用utf8文件是正确的。 (在Termninal中使用file命令)

当我在Excel中打开csv文件时,重音字符是错误的。 在Excel中,如果我用文本编辑器打开文件,我会使用AZERTY√©而不是AZERTYéa。

这是我的代码:

    // 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);         
        });
        });

1 个答案:

答案 0 :(得分:1)

我终于找到了解决方案。发送文件时出现BOM问题。我认为它已经设置,因为我在编写文件时设置它....

我改变了这一行

    res.status(200).send(data);         

    res.status(200).send('\ufeff'+data);