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

Posted

技术标签:

【中文标题】Node js:以编程方式更改 csv 文件编码并解析为 json【英文标题】:Node js : change csv file encoding programatically and parse to 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()方法时,它返回一个空字符串。我该如何解决这个问题?

【问题讨论】:

【参考方案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

【讨论】:

以上是关于Node js:以编程方式更改 csv 文件编码并解析为 json的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 中以编程方式复制、重命名和粘贴文件的最佳方法

以编程方式将 CSV 数据导入 Access

使用 Node.js(和 NPM 包“psd”)解析 Adob​​e PSD 文件,以编程方式替换图像层,然后保存/渲染为 PNG

SSIS - 列名作为变量/以编程方式更改

使用 websockets (Node, Socket.io) 读取 CSV 文件并间隔发送数据

解决node.js读取.csv文件中文出现乱码问题