Node js:以编程方式更改csv文件编码并parsing为json

我有一个utf-16编码的csv文件,需要将其转换为utf8并将其转换为JSON。 我正在使用csvtojsoniconv-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()方法时,它返回一个空string。 我怎样才能解决这个问题?

我认为asynchronouspipe可能与它有关。 您可以确保在完成后通过将逻辑放入end事件中才能打开encoded.csv

 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