使用Nodejs的csvtojson转换会产生乱码数据

我想转换一个csv文件到json使用csvtojson转换器nodejs.My代码如下所示。 我得到如下所示的数据输出。 我不知道为什么会发生这种情况,以及如何防止这种情况发生。

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); 

{“\ \ \0000000000000000c \ \ u \ \:::::::::::::::::::::{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ u0000e \ u0000c \ u00000a \ u0000e \ u0000e \ u0000r \ u0000s \ u0000e \ u0000o \ u0000e \ u0000e \ u0000e \ u0000e \ u0000e \ u0000n \ u0000e \ u0000 \ u0000 \ 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 \ u0000e \ u0000w \ u0000 u \ u0000 u \ u0000b \ u0000m \ u0000i \ u0000t \ 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 \ u000 0S \ u0000u \ u0000b \ u0000m \ u0000i \ u0000t \ u0000 \ u0000M \ u0000i \ u0003 \ u003000 u \ u0000 u \ untua \ u0000 u \ u0000 u \ 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 \ u0000d \ u0000a \ u0000p \ u0000d \ u0000a \ u0000t \ u0000e \ 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 \ u0000c \ u0000e \ u0000000 \ u000000 \ u000000 \ u000000 \ u000000 \ u000000 \ u000000 \ \ u00008 \ u00002 \ u00006 \ u00002 \ u0000“,”\ u0000S \ u0000t \ u0000a \ u0000r \ u0000 \ u0000R \ u0000a \ u0000t \ u0000i \ u0000n \ u0000g \ u0000“:”\ u00005 \ u0000“,”\ u0000R \ u0000e \ u0000v \ u0000i \ u0000e \ u0000w \ u0000w \ u0000 \ u0000t \ u0000l \ u0000e \ u0000t \ u0000 \ u0000 \ u0000t \ u0000t \ u0000 \ u0000 \ u0000 \ u0000 \ u0000v \ u0000e \ u0000 \ u0000o \ u0000p \ u0000e \ u0000r \ u0000 \ u0000R \ u0000e \ u0000p \ u0000l \ u0000y \ u0000 \ u0000D \ u0000a \ u0000t \ u0000e \ u0000 \ u0000a \ u0000d \ u00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ u0000e \ u0000p \ u0000l \ u0000y \ u00100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 “\ 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 \ u0000e \ü 0000w \ u0000 \ u0000L \ u0000i \ u0000n \ u0000k \ u0000“:”\ u0000“},{”\ u0000a \ u0000c \ u0000k \ u0000a \ u0000g \ u0000e \ u0000 \ u0000N \ u0000a \ u0000m \ u0000e \ u0000 “:” \ u0000" 的}

我解决了这个问题:这是一个编码问题:正确的代码是“utf16”var csvEncoding = {encoding:'utf16le'}; var csvString = fs.readFileSync(csvfile,csvEncoding).toString(); converter.fromString(csvString,function(err,result){//您的代码在这里console.log(err); console.log(result);});

我有一个非常类似的问题,但使用csv-parse与S3出来的文件。

感谢OP,我得到了一个正确的path与编码问题,我能够解决我的问题,通过使用utf16le在我的stream加上iconv-lite像这样:

 s3 .getObject(getObjectParams) .createReadStream() .on('end', () => cb(null)) .pipe(iconv.decodeStream('utf16le')) .pipe(parse({ delimiter: '\t', columns: true })) .pipe(transformer); 

希望这可以帮助他人在同一条船上!

 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);