Node js:以编程方式更改csv文件编码并parsing为json
我有一个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()
方法时,它返回一个空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