我有一个使用 utf-16
编码的 csv 文件,需要将其编码更改为 utf8
并将其转换为 JSON。我正在使用 csvtojson
和 iconv-lite
模块。这是我的代码:
var data = fs.createReadStream("myfile.csv");
data.pipe(iconv.decodeStream('utf16'))
.pipe(iconv.encodeStream('utf8'))
.pipe(fs.createWriteStream("encoded.csv"));
var Converter = require("csvtojson").Converter;
var csvStr = fs.readFileSync("encoded.csv").toString();
var converter = new Converter({});
converter.fromString(csvStr, function(err, jsonObj) {
if (err) {
handleError(err)
}
console.log(jsonObj)
});
问题是 iconv
用正确的编码转换 csv 文件,但是当我读取这个文件并调用 toString()
方法时,它返回一个空字符串。我该如何解决这个问题?
最佳答案
我认为异步 pipe
可能与此有关。您可以确保只在 encoded.csv
完成后打开它,方法是将逻辑放入 end
事件中。
var data = fs.createReadStream("myfile.csv");
data.pipe(iconv.decodeStream('utf16'))
.pipe(iconv.encodeStream('utf8'))
.pipe(fs.createWriteStream("encoded.csv"));
data.on('end', function() {
var Converter = require("csvtojson").Converter;
var csvStr = fs.readFileSync("encoded.csv").toString();
var converter = new Converter({});
converter.fromString(csvStr, function(err, jsonObj) {
if (err) {
handleError(err)
}
console.log(jsonObj)
});
}
https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options
关于json - Node js : change csv file encoding programatically and parse to json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32375816/