【问题标题】:csvtojson conversion using Nodejs gives gibberish data使用 Nodejs 进行 csvtojson 转换会产生乱码数据
【发布时间】:2016-06-26 06:21:26
【问题描述】:

我正在尝试使用 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\i\u0000.\u\u00000r \ u0000n \ u0000e \ u0000t \ u0000。\ u0000h \ u0000r \ u0000p \ u0000m \ u00000 \ u0000b \ u0000i \ u0000 \ u000000 \ u0000“,”\ u0000a \ u0000p \ u0000p \ u0000 \ u0000v \ u0000e \ u0000r \ u0000s \ u0000ii \ u0000o \ u0000n \ u0000 \ u0000c \ u0000o \ u0000d \ u0000e \ u0000“:”\ u00006 \ u00002 \ u0000“,”\ u0000r \ u0000e \ u0000v \ u0000i \ u0000e \ u0000w \ u000000 \ u0000r \ u0000 \ u0000l \ u0000a \u0000n\u0000g\u0000u\u0000a\u0000g\u0000e\u0000":"\u0000e\u0000n\u0000","\u0000D\u0000e\u0000v\u0000i\u0000c\u0000e\u0000":"00\"R \ u0000e \ u0000v \ u0000i \ u0000e \ u0000w \ u0000 \ u0000s \ u0000u \ u0000b \ u0000m \ u0000i \ u0000m \ u000000 \ u0000d \ u0000a \ u0000d \ u0000a \ u0000t \ u0000a \ u0000 \ u0000a \ u0000 \ u0000a \ u0000n \ u00d \ u0000 \ u0000 \ u0000i \ u0000m \ u0000e \ u0000“:”\ u00002 \ u000000 \ u00001 \ u00005 \ u00005 \ u00005 \ u0000- \ u00001 \ u00002 \ u0000- \ u00002 \ u00002 \ u0000t \ u00002 \ u0000t \ u00002 \ u0000t \ u00002 \ u0000t \ u00000 \ u00003 \ u0000:\ u00003 \ u00002 \ u0000:\ u00003 \ u00008 \ u0000Z\u0000","\u0000R\u0000e\u0000v\u0000i\u0000e\u0000w\u0000 \u0000 s \ u0000u \ u0000b \ u0000m \ u0000i \ u0000t \ u0000 \ u0000m \ u0000i \ u0000i \ u0000s \ u0000i \ u0000s \ u000000 \ u0000n \ u0000c \ u0000n \ u0000c \ u0000e \ u0000c \ u0000e \ u0000 \ u0000e \ u0000c \ u0000e \ u0000 \ U0000“:”\ u00001 \ u00004 \ u00005 \ u000000 \ u00007 \ u00005 \ u00005 \ u00001 \ u00005 \ u00008 \ u00002 \ u00006 \ u00002 \ u00006 \ u00002 \ u0000“,”\ u0000r \ u0000e \ u0000v \ u0000i \ u0000e \ u0000w \ u0000 \ U0000L \ u0000a \ u0000s \ u0000t \ u0000 \ u0000u \ u0000p \ u0000d \ u0000a \ u0000d \ u000000 \ u0000 \ u0000d \ u0000a \ u0000t \ u0000a \ u0000t \ u0000a \ u0000 \ u0000a \ u0000n \ u0000d \ u0000 \ u0000t \ u0000i \ u0000m \ u0000e \ U0000“:”\ u00002 \ u000000 \ u00001 \ u00005 \ u00005 \ u00005 \ u0000- \ u00001 \ u00002 \ u0000- \ u00002 \ u00002 \ u0000t \ u00002 \ u0000t \ u00002 \ u00002 \ u0000:\ u00003 \ u00002 \ u0000:\ u00003 \ u00008 \ u0000z \ u0000 “,”\ u0000r \ u0000e \ u0000v \ u0000i \ u0000e \ u0000iw \ u0000 \ u0000l \ u0000a \ u0000a \ u0000a \ u0000a \ u0000a \ u0000 \ u0000u \ u0000p \ u0000d \ u0000a \ u0000t \ u000000 \ u0000 \ u0000m \ u0000i \ u0000l \ u0000m \ U0000i \ u0000s \ u0000 \ u0000s \ u0000i \ u0000n \ u0000c \ u0000e \ u0000c \ u0000e \ u0000p \ u0000o \ u0000c \ u0000h \ u0000“:”\ u00001 \ u00004 \ u00005 \ u00000 \ u00007 \ u00005 \ u00005 \ u00005 \ u00005 \u00008\u 00002 \ u00006 \ u00002 \ u0000“,”\ u0000s \ u0000t \ u0000a \ u0000r \ u0000 \ u0000r \ u0000a \ u0000a \ u0000i \ u0000 \ u0000g \ u0000“:”\ u00005 \ u0000“,”\ u0000r \ u0000e \ u0000v \ u0000i \ u0000e \ u0000w \ u0000 \ u0000t \ u0000i \ u0000t \ u0000 \ u000000 \ u0000“:”\ u0000 \ u0000e \ u0000v \ u0000i \ u000000 \ u0000w \ u000000 \ u0000w \ u0000 \ u0000t \ u000000 \ u0000 x \ u0000 \ u0000“:”\ u0000“,”\ u0000d \ u0000e \ u0000v \ u0000e \ u0000p \ u0000o \ u000000p \ u0000e \ u0000r \ u0000 \ u000000p \ u0000e \ u000000p \ u0000 \ u000000 \ u0000 \ u000000 \ u0000 \ u000000 \ u0000 \ u000000 \ u0000 \ u00000 \ u0000 \ u0000a \ u0000n \ u0000d \ u0000 \ u0000d \ u0000i \ u0000m \ u000000 \ u000000“:”\ u0000“,”\ u0000d \ u0000e \ u0000v \ u0000e \ u000000p \ u0000o \ u0000p \ u0000e \ u0000r \ u0000 \ u0000r \ u0000e \ u0000p \ u0000l \ u0000y \ u0000 \ u0000m \ u0000i \ u000000 \ u000000 \ u0000i \ u0000s \ u0000 \ u0000s \ u0000i \ u0000n \ u0000c \ u0000 \ u0000 \ u0000e \ u0000p \ u0000o \ u0000c \ u0000h \ u0000c \ u0000h \ u0000“: “\ u0000”,“\ u0000d \ u0000e \ u0000v \ u0000e \ u000000p \ u0000o \ u000000p \ u0000e \ u0000r \ u0000 \ u000000 \ u0000e \ u000000p \ u0000 \ u000000 \ u0000 \ u000000 \ u0000 \ u0000t \ u0000e \ u0000x \ u0000p \ u0000 \ \ u0000t \ u0000”: "\u0000","\u0000R\u0000e\u0000v\u0000i\u0000e\u0 000w\u0000\u0000L\u0000i\u0000n\u0000k\u0000":"\u0000"}, {"��P\u0000a\u0000c\u0000k\u0000a\u0000g\u0000e\u0000 \u0000N\u0000a\u0000m\u0000e\u0000":"\u0000"}

【问题讨论】:

  • 您的 input.csv 是什么样的?它的编码是什么?
  • 我可以看到�。所以我想它是 UTF-8

标签: javascript json node.js csv npm


【解决方案1】:

我解决了这个问题:这是一个编码问题:正确的代码是“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); 

});

【讨论】:

  • 你拯救了我的一天。谢谢。
  • 如何检查是否需要更改编码?
【解决方案2】:

我遇到了与 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);

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

【讨论】:

    【解决方案3】:
    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);
    

    【讨论】:

    • 这段代码和我做的差不多。它适用于我离开互联网的某些示例。它尤其不适用于我的文件。数据按预期读取,但未按预期写入。我注意到文件中有一些字符,例如“��”。这是一个问题吗?文件权限与任何其他文件相同。所以这不是问题。
    • 我解决了这个问题:这是一个编码问题:正确的代码是“utf16” var csvEncoding = { encoding: 'utf16le' }; var csvString = fs.readFileSync(csvfile, csvEncoding).toString(); converter.fromString(csvString, function(err,result){ //你的代码在这里 console.log(err); console.log(result); });
    • 感谢大家的投入
    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    相关资源
    最近更新 更多