首页 > 解决方案 > JavaScript 希伯来语 CSV 解析问题

问题描述

所以我得到了一个 csv 文件,它从右边的 excel 中保存为 CSV -UTF-8 文件,它在左边的 Visual Studio 中,它在 excel 中。

当我尝试使用 PapaParse/csv-parser 解析时,我仍然看到 <?> 格式的输出,这意味着编码:PapaParse 尝试:

 papa.parse(file, {
    worker: true, 
    step: function (result) {
       count++; 
       console.log(result.data[0])
    },
    complete: function (results, file) {//
       console.log('parsing complete read', count, 'records.');
    }
});

csv阅读器尝试:

const csv = require('csv-parser');
const results = [];
fs.createReadStream('Cities.csv')
   .pipe(csv())
   .on('data', function (datarow) {
       results.push(datarow);
   })
   .on('end', function () {
       console.log(results.toString('utf-8");
   });

在这两种情况下,输出都是 <?> cant read hebrew chars

标签: javascriptcsvencodingpapaparse

解决方案


在我看来,您将原始块缓冲区传送到csv,而不是使用 UTF-8 编码转换为字符串的结果。您没有告诉createReadStream为您处理任何编码工作,因此它将读取原始数据并将它们作为实例传递给csv函数(因为您正在传递给它) 。Buffer

与其读取原始数据并随后进行转换,不如告诉您希望它通过其options 参数createReadStream为您处理转换:

const csv = require('csv-parser');
const results = [];
fs.createReadStream('Cities.csv', 'utf-8')
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^
   .pipe(csv())
   .on('data', function (datarow) {
       results.push(datarow);
   })
   .on('end', function () {
       // Use `results` here (it's an array of objects according to the
       // csv-parser documentation; calling `toString` on it probably isn't
       // what you want)
   });

推荐阅读