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

时间:2016-03-11 05:26:39

标签: javascript json node.js csv npm

我正在尝试使用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”}

3 个答案:

答案 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,我遇到了编码问题的正确路径,我能够在我的信息流中使用utf16leiconv-lite来解决我的问题,如下所示:

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

希望这有助于其他人在同一条船上!