在nodejs

时间:2017-04-28 11:15:03

标签: json node.js excel csv utf-8

我正在编写一个脚本,将带有中文的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 中的中文编码问题?

0 个答案:

没有答案