我有一个带utf-16
编码的csv文件,需要将其enconding更改为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()
方法时,它返回一个空字符串。我该如何解决这个问题?
答案 0 :(得分:2)
我认为异步pipe
可能与它有关。您可以通过在encoded.csv
事件中添加逻辑来确保仅在完成后end
打开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)
});
}
。
var doc = XDocument.Load("XMLFile1.xml");
foreach (var fields in doc.Descendants("Fields")) {
foreach (var field in fields.Elements("Field")) {
Debug.WriteLine(string.Format("{0}: {1}", field.Attribute("Name").Value, field.Elements("Value").First().Value));
}
}
https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options