0

这是这个问题的副本here

这是我正在尝试使用的代码:

let Client = require('ssh2-sftp-client');
let sftp = new Client();
var csv = require("csvtojson");

sftp.connect({
 host: 'HOST',
 port: 'PORT',
 username: 'USERNAME',
 password: 'PASSWORD'
}).then(() => {
 return sftp.get('/home/user/etc/testfile.csv');
  }).then((data) => {
   csv()
   .fromString(data.toString()) // changed this from  .fromStream(data)
   .subscribe(function(jsonObj) { //single json object will be emitted for each csv line
      // parse each json asynchronously
    return new Promise(function(resolve, reject) {
       resolve()
       console.log(jsonObj);
    })
   })
 }).catch((err) => {
 console.log(err, 'catch error');
});

我可以读回 CSV 数据,并且可以在 console.log(jsonObj) 上看到它进入 JSON 格式,但数据不可读,全部为 '\x00o\x00n\x00'' ..

我不知道该做什么://异步解析每个json

任何人都可以帮助弄清楚从缓冲区返回后如何解析 CSV/JSON 吗?

4

1 回答 1

1

空字节\x00指向编码/解码问题。CSV 文件可能使用 UTF-16 编码,但Buffer.toString()默认情况下使用 UTF-8 解码数据。您可以将其更改为data.toString('utf16le')(或data.toString('ucs2'))以强制使用正确的编码。

于 2021-08-04T13:50:15.207 回答