我正在尝试使用nodejs中的csvtojson转换器将csv文件转换为json。我的代码如下所示。 我得到一个数据输出,如下所示。我不确定为什么会这样,以及如何防止它。
var Converter = require("csvtojson").Converter;
var fileStream = fs.createReadStream("input.csv");
var converter = new Converter({constructResult:false});
converter.on("end_parsed", function (jsonObj) {
var jsonfile = require('jsonfile');
var file = 'output.json';
jsonfile.writeFile(file, jsonObj, function (err) { console.error(err); });});
fileStream.pipe(converter);
{ “P \ u0000a \ u0000c \ u0000k \ u0000a \ u0000g \ u0000e \ u0000的\ u0000N \ u0000a \ u0000m \ u0000e \ u0000的”:“\ u0000c \ u0000o \ u0000m \ u0000的\ u0000t \ u0000r \ u0000i \ u0000n \ u0000e \ u0000t符\ u0000 \ u0000h \ u0000r \ u0000p \ u0000m \ u0000o \ u0000b \ u0000i \ u0000l \ u0000e \ u0000" 的,“\ u0000A \ u0000p \ u0000p符\ u0000 \ u0000V \ u0000e \ u0000r \ u0000s \ u0000i \ u0000o \ u0000n符\ u0000 \ u0000C \ u0000o \ u0000d \ u0000e \ u0000的 “:” \ u00006 \ u00002 \ u0000" 的,“\ u0000R \ u0000e \ u0000v \ u0000i \ u0000e \ u0000w \ u0000e \ u0000r符\ u0000 \ u0000L \ u0000a \ u0000n \ u0000g \ u0000u \ u0000a \ u0000g \ u0000e \ u0000的 “:” \ u0000e \ u0000n \ u0000" 的, “\ u0000D \ u0000e \ u0000v \ u0000i \ u0000c \ u0000e \ u0000的”: “\ u0000的”,“\ u0000R \ u0000e \ u0000v \ u0000i \ u0000u \ u0000w \ u0000u \ u0000u \ u0000b \ u0000m \ u0000i \ u0000t \ u0000 \ u0000D \ u0000a \ u0000t \ u0000e \ u0000 \ u0000a \ u0000n \ u0000d \ u0000 \ u0000t \ u0000i \ u0000m \ u0000m \ u0000e \ u0000的 “:” \ u00002 \ u00000 \ u00001 \ u00005 \ u0000- \ u00001 \ u00002 \ u0000- \ u00002 \ u00002 \ u0000T \ u00000 \ u00003 \ u0000的:\ u00003 \ u00002 \ u0000的:\ u00003 \ u00008 \ u0000Z \ u0000“,”\ u0000R \ u0000e \ u0000v \ u0000i \ u0000e \ u0000w \ u0000 \ u 0000S \ u0000u \ u0000b \ u0000m \ u0000i \ u0000t \ u0000 \ u0000i \ u0000l \ u0000l \ u0000i \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000c \ u0000c \ u0000c \ u0000 \ u0000 \ u0000 \ u0000c \ u0000 \ u0000的 “:” \ u00001 \ u00004 \ u00005 \ u00000 \ u00007 \ u00005 \ u00005 \ u00001 \ u00005 \ u00008 \ u00002 \ u00006 \ u00002 \ u0000" 的,“\ u0000R \ u0000e \ u0000v \ u0000i \ u0000e \ u0000w符\ u0000 \ u0000L \ u0000a \ u0000s \ u0000t \ u0000 \ u0000U \ u0000p \ u0000 \ u0000D \ u0000a \ u0000t \ u0000e \ u0000 \ u0000a \ u0000n \ u0000d \ u0000 \ u0000T \ u0000i \ u0000m \ u0000e \ u0000的 “:” \ u00002 \ u00000 \ u00001 \ u00005 \ u0000- \ u00001 \ u00002 \ u0000- \ u00002 \ u00002 \ u0000T \ u00000 \ u00003 \ u0000的:\ u00003 \ u00002 \ u0000的:\ u00003 \ u00008 \ u0000Z符\ u0000 “” \ u0000R \ u0000e \ u0000v \ u0000i \ u0000e \ u0000w \ u0000的\ u0000L \ u0000a \ u0000s \ u0000t \ u0000的\ u0000U \ u0000p \ u0000d \ u0000a \ u0000t \ u0000e \ u0000的\ u0000M \ u0000i \ u0000l \ u0000l \ u0000i \ u0000s符\ u0000 \ u0000S \ u0000i \ u0000n \ u0000c \ u0000e符\ u0000 \ u0000E \ u0000p \ u0000o \ u0000c \ u0000h \ u0000的 “:” \ u00001 \ u00004 \ u00005 \ u00000 \ u00007 \ u00005 \ u00005 \ u00001 \ u00005 \ U000 08 \ u00002 \ u00006 \ u00002 \ u0000" 的, “\ u0000S \ u0000t \ u0000a \ u0000r符\ u0000 \ u0000R \ u0000a \ u0000t \ u0000i \ u0000n \ u0000g \ u0000的”: “\ u00005 \ u0000的”,“\ u0000R \ u0000e \ u0000v \ u0000i \ u0000e \ u0000w符\ u0000 \ u0000T \ u0000i \ u0000t \ u0000l \ u0000e \ u0000的 “:” \ u0000" 的,“\ u0000R \ u0000e \ u0000v \ u0000i \ u0000e \ u0000w符\ u0000 \ u0000T \ u0000e \ u0000x \ u0000t \ u0000的 “:” \ u0000" 的,“\ u0000D \ u0000e \ u0000v \ u0000e \ u0000l \ u0000o \ u0000p \ u0000e \ u0000r符\ u0000 \ u0000R \ u0000e \ u0000p \ u0000l \ u0000y符\ u0000 \ u0000D \ u0000a \ u0000t \ u0000e符\ u0000 \ u0000a \ u0000n \ u0000d符\ u0000 \ u0000T \ u0000i \ u0000m \ u0000e \ u0000的 “:” \ u0000" 的,“\ u0000D \ u0000e \ u0000v \ u0000e \ u0000l \ u0000o \ u0000p \ u0000e \ u0000r符\ u0000 \ u0000R \ u0000e \ u0000p \ u0000l \ u0000y \ u0000 \ u0000i \ u0000i \ u0000l \ u0000l \ u0000i \ u0000s \ u0000 \ u0000S \ u0000i \ u0000n \ u0000c \ u0000e \ u0000 \ u0000E \ u0000p \ u0000o \ u0000c \ u0000h \ u0000 “:” \ u0000" 的,“\ u0000D \ u0000e \ u0000v \ u0000e \ u0000l \ u0000o \ u0000p \ u0000e \ u0000r符\ u0000 \ u0000R \ u0000e \ u0000p \ u0000l \ u0000y符\ u0000 \ u0000T \ u0000e \ u0000x \ u0000t符\ u0000 “:” \ u0000" 的,“\ u0000R \ u0000e \ u0000v \ u0000i符\ u0000 e \ u0000w \ u0000 \ u0000L \ u0000i \ u0000n \ u0000k \ u0000“:”\ u0000“}, {“ P\ u0000a \ u0000c \ u0000k \ u0000a \ u0000g \ u0000e \ u0000 \ u0000N \ u0000a \ u0000m \ u0000e \ u0000”:“\ u0000”}
答案 0 :(得分:4)
我解决了这个问题:这是一个编码问题:正确的代码是“utf16”
var csvEncoding = { encoding: 'utf16le' };
var csvString = fs.readFileSync(csvfile, csvEncoding).toString();
converter.fromString(csvString, function(err,result){
//your code here console.log(err);
console.log(result);
});
答案 1 :(得分:0)
var Converter = require("csvtojson").Converter;
var fs = require('fs');
var fileStream = fs.createReadStream("input.csv");
var converter = new Converter({constructResult:true});
converter.on("end_parsed", function (jsonObj) {
var jsonfile = require('jsonfile');
var file = 'output.json';
console.log(jsonObj);
jsonfile.writeFile(file, jsonObj, function (err,result) {
console.error(err);
console.log(result) ;
});
});
fileStream.pipe(converter);
答案 2 :(得分:0)
我遇到了与OP非常相似的问题,但是使用了csv-parse
来自S3的文件。
感谢OP,我遇到了编码问题的正确路径,我能够在我的信息流中使用utf16le
并iconv-lite
来解决我的问题,如下所示:
s3
.getObject(getObjectParams)
.createReadStream()
.on('end', () => cb(null))
.pipe(iconv.decodeStream('utf16le'))
.pipe(parse({ delimiter: '\t', columns: true }))
.pipe(transformer);
希望这有助于其他人在同一条船上!