Вернуть не utf-8 ответ при чтении CSV - PullRequest
0 голосов
/ 02 марта 2020

В моем случае я пытаюсь прочитать CSV-файл, который доступен в облачном хранилище Google. Это мой код:

const csv = require('csv-parser');
const fs = require('fs');

const file= storage.bucket('my-bucket').file('file.csv')

file.createReadStream({encoding: 'utf8'})
    .on('error', (err) => {
      console.log(err)
    })
    .pipe(csv())
    .on('data', (row) => {
        console.log(row);
    }) 
    .on('end', (end) => {
        console.log(end)
    })

  });

Но возвращает такие вещи, как:

'\u0000D\u0000a\u0000i\u0000l\u0000y\u0000 \u0000D\u0000e\u0000v\u0000i\u0000c\u0000e\u0000 \u0000I\u0000n\u0000s\u0000t\u0000a\u0000l\u0000l\u0000s\u0000': '\u00005\u00000\u0000'

Есть идеи, что здесь может пойти не так?

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Так как все остальные прочитанные вами байты выглядят как 00, файл, вероятно, не UTF-8, а UTF-16.

Попробуйте file.createReadStream({encoding: 'utf16le'}) или, если это все еще искажен, file.createReadStream({encoding: 'utf16be'}).

0 голосов
/ 02 марта 2020

Один подход может быть:

const csv = require('csv-parser');
const fs = require('fs');
const file = storage.bucket('my-bucket').file('file.csv');

let data = '';
file.createReadStream({encoding: 'utf8'})
    .on('error', (err) => {
        console.log(err)
    })
    .pipe(csv())
    .on('data', (row) => {
        data += row; // or directly apply as row.toString('utf-8')
        console.log(row);
    })
    .on('end', (end) => {
        // so all is buffered now lets make it readable
        data = data.toString('utf-8');
        console.log(data);
    });
...