我正在编写一个脚本,将带有中文的json文件转换为csv文件。所有转换都有效,但中文内容似乎出现了编码问题。如果我使用 Sublime 打开转换后的CSV文件,则所有中文字词都是正确的。如果我用 Excel 打开它(我的版本是2016),这些单词都不正确。此外,在中文栏目后面的下一栏中的部分信息将附加到未编码的中文。 如果我首先使用 Sublime 打开CSV,然后使用带BOM的UTF-8 进行编码保存,则整个CSV文件在 Excel 中看起来正确。 我知道 UTF-16 在 Windows 10中的Excel 中可能要好得多,但无论我对此代码进行了评论,都没有任何改变。
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!");
});
});
});
});
});
任何人都可以帮我解决 Windows 10 中 Excel 2016 中的中文编码问题?