【问题标题】:Return non utf-8 responce when read csv读取 csv 时返回非 utf-8 响应
【发布时间】:2021-03-10 16:44:43
【问题描述】:

在我的例子中,我尝试读取谷歌云存储上可用的 csv 文件。 这是我的代码:

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'

知道这里可能出了什么问题吗?

【问题讨论】:

    标签: node.js csv google-cloud-storage


    【解决方案1】:

    由于您读取的数据的每个其他字节看起来都是00,因此该文件可能不是 UTF-8,而是 UTF-16。

    试试file.createReadStream({encoding: 'utf16le'}),如果还是乱码,试试file.createReadStream({encoding: 'utf16be'})

    【讨论】:

      【解决方案2】:

      一种方法可能是:

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

      【讨论】:

        猜你喜欢
        • 2017-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-07
        • 2012-03-11
        • 1970-01-01
        • 2017-08-29
        相关资源
        最近更新 更多