在nodejs中将JSON文件转换为CSV文件时出现UTF-8/16编码问题

在nodejs中将JSON文件转换为CSV文件时出现UTF-8/16编码问题,json,node.js,excel,csv,utf-8,Json,Node.js,Excel,Csv,Utf 8,我正在编写一个脚本,将带有中文的json文件转换为csv文件。所有的转换工作,但中文内容似乎出现编码问题。如果我用Sublime打开转换后的CSV文件,则所有中文单词都是正确的。如果我用Excel打开它(我的版本是2016年),这些单词看起来都不对。此外,下一栏中带有中文的部分信息将附加到未编码的中文中。 如果我先用Sublime打开CSV,然后用编码保存在UTF-8和BOM中,整个CSV文件在Excel中看起来是正确的。 我知道在Windows 10的Excel中使用UTF-16可能会更好,但

我正在编写一个脚本,将带有中文的json文件转换为csv文件。所有的转换工作,但中文内容似乎出现编码问题。如果我用Sublime打开转换后的CSV文件,则所有中文单词都是正确的。如果我用Excel打开它(我的版本是2016年),这些单词看起来都不对。此外,下一栏中带有中文的部分信息将附加到未编码的中文中。 如果我先用Sublime打开CSV,然后用编码保存在UTF-8和BOM中,整个CSV文件在Excel中看起来是正确的。 我知道在Windows 10的Excel中使用UTF-16可能会更好,但无论我对这段代码进行了注释,都没有任何变化

data = data.replace(/^\uFEFF/, "");
这是我的全部密码

var fs = require('fs');
    enter code here`var json2csv = require('json2csv');
    var Excel = require('exceljs');
    var detectEncoding = require('jschardet');
    var encoding = require("encoding");

fs.readFile('./input.json', function (err, data) {
    var charsetMatch = detectEncoding.detect(data);
    if(charsetMatch.encoding != "UTF-8") {
        data = encoding.convert(data, "UTF-8", charsetMatch.encoding).toString("utf8");
        data = data.replace(/^\uFEFF/, "");
    }
    var jsondata = JSON.parse(data);
    var csvFields = Object.keys(jsondata[0]);
    var unwindFields = [];
    for(var i = 0; i < csvFields.length; i++) {
        if(Array.isArray(jsondata[0][csvFields[i]])) {
            unwindFields.push(i);
        }
    }
    json2csv({data: jsondata, fields: csvFields, excelString: true}, function(err, csv) {
        fs.writeFile('./output.csv', csv, function(err) {
            var workbook = new Excel.Workbook();
            workbook.csv.readFile("./output.csv").then(function(worksheet) {
                for(var i = 0; i < csvFields.length; i++) {
                    for(var x = 0; x < jsondata.length; x++) {
                        var cellCode = (String.fromCharCode(parseInt((i / 26), 10) + 64) + String.fromCharCode(i - 26 * parseInt((i / 26), 10) + 1 + 64) + "" + (x + 2)).replace(/\@/g,"");
                        var cell = worksheet.getCell(cellCode);
                        if(cell.value != "" && cell.value != null && cell.value != undefined && typeof cell.value === "string") {
                            cell.value = cell.value.replace(/\[/g,"(").replace(/\]/g,")").replace(/\)\"\,\"\(/g,"), \n(").replace(/\(\"\(/g,"((").replace(/\)\"\)/g,"))").replace(/\"\,\"/g,",");
                        }
                    }
                }
                workbook.csv.writeFile("./output.csv").then(function() {
                    console.log("All files have been converted successfully!");
                });
            });
        });
    });
});
var fs=require('fs');
在此处输入代码'var json2csv=require('json2csv');
var Excel=require('exceljs');
var detectEncoding=require('jschardet');
var编码=要求(“编码”);
fs.readFile('./input.json',函数(err,data){
var charsetMatch=detectEncoding.detect(数据);
if(charsetMatch.encoding!=“UTF-8”){
data=encoding.convert(数据,“UTF-8”,字符集匹配.encoding).toString(“utf8”);
data=data.replace(/^\uFEFF/,“”);
}
var jsondata=JSON.parse(数据);
var csvFields=Object.keys(jsondata[0]);
var unwindFields=[];
对于(变量i=0;i
任何人都可以帮我解决Windows 10中Excel 2016中的中文编码问题