Проблема кодирования UTF-8/16 при повороте файла JSON в файл CSV в nodejs

Я пишу сценарий, чтобы превратить json-файл с китайцами в файл csv. Все преобразования работают, но китайское содержимое, похоже, вызывает проблемы с кодировкой. Если я открою преобразованный CSV-файл с Sublime , все китайские слова верны. Если я открою его с помощью Excel (моя версия – 2016), ни одно из этих слов не будет выглядеть правильно. Кроме того, часть информации в следующем столбце за колонкой с китайцами будет прикреплена к неподготовленным китайцам. Если я сначала открою CSV с Sublime, а затем сохраню с кодировкой в UTF-8 с BOM , весь файл CSV будет выглядеть правильно в Excel . Я знаю, что UTF-16 может быть намного лучше в Excel в Windows 10 , но ничего не изменилось, независимо от того, я прокомментировал этот код.

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!"); }); }); }); }); }); 

Кто-нибудь может помочь мне решить проблемы китайского кодирования в Excel 2016 в Windows 10 ?

Interesting Posts

добавление COM-dll в качестве ссылки из определенного места

Excel: автоматизация выбора неизвестного количества ячеек

c # получить список значений из файла excel

Для каждого цикла, при котором Excel может повесить

Создание базы данных Excel для отслеживания инвентаризации

java.lang.ClassNotFoundException: org.apache.poi.poifs.crypt.agile.AgileEncryptionInfoBuilder

XSD-сопоставление в Excel для генерации многократных экземпляров XML-элементов

Ошибка времени выполнения «5» при импорте CSV (Excel 2011, Mac)

Как удалить определенные строки, сравнивая значения друг с другом в нескольких столбцах?

Ограничить входное значение ячейки Excel

Excel читает коды «64E0113» как число «6.4E + 114» даже при форматировании текста

То же самое содержимое на 2 листах с различными фильтрами.

Мне нужно вставить 2 набора данных, разделенных запятой в одну ячейку, используя макрос

VBA: получение данных из HTML

Получение пользовательского ввода в excel (Apache poi)

Давайте будем гением компьютера.