【问题标题】:Node js : change csv file encoding programatically and parse to jsonNode js:以编程方式更改 csv 文件编码并解析为 json
【发布时间】:2015-11-29 07:11:09
【问题描述】:

我有一个 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()方法时,它返回一个空字符串。我该如何解决这个问题?

【问题讨论】:

    标签: json node.js csv encoding


    【解决方案1】:

    我认为异步pipe 可能与它有关。通过将逻辑放入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

    【讨论】:

      猜你喜欢
      • 2017-12-14
      • 2014-09-11
      • 2020-12-29
      • 2022-11-17
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多