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。我正在使用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()
方法时,它返回一个空字符串。我该如何解决这个问题?
【问题讨论】:
【参考方案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 中以编程方式复制、重命名和粘贴文件的最佳方法
使用 Node.js(和 NPM 包“psd”)解析 Adobe PSD 文件,以编程方式替换图像层,然后保存/渲染为 PNG