无法从节点中的csv文件stream读取重音字符

开始。 我目前使用npm fast-csv这是一个很好的CSV阅读器/作家,是非常简单和直接。 Im试图做的是将这个与iconv一起使用来处理“accented”字符和非ASCII字符,并将它们转换为ASCII对等字符或根据字符来删除它们。

我当前的进程我做fast-csv是通过一个读取stream引入一个块进行处理(进来一行),暂停读取stream,处理数据,pipe道数据写入stream,然后恢复读stream使用callback。 Fast-csv目前知道根据从读入stream进入的数据的格式将块分离到哪里。

整个过程如下所示:

var stream = fs.createReadStream(inputFileName); function csvPull(source) { csvWrite = csv.createWriteStream({ headers: true }); writableStream = fs.createWriteStream(outputFileName); csvStream = csv() .on("data", function (data) { csvStream.pause(); processRow(data, function () { csvStream.resume(); }); }) .on("end", function () { console.log('END OF CSV FILE'); }); csvWrite.pipe(writableStream); source.pipe(csvStream); } csvPull(stream); 

我目前遇到的问题是,我注意到,由于某种原因,当我的JavaScript编译,它并不固有地识别非ASCII字符,所以我诉诸不得不使用npm iconv-lite来编码数据stream,因为它进入可用的东西。 然而,这提出了一个更大的问题,因为现在编码的数据,fast-csv将不再知道在哪里拆分块(行)。 由于我将要使用的CSV的大小,这是一个问题; 将不会将整个CSV加载到缓冲区中进行解码。

有没有关于如何解决这个问题,而不写我自己的CSVparsing器到我的代码的任何build议?

除非我误解,否则应该可以通过将stream上的编码设置为utf-8 ( docs )来解决此问题。

第一行:

 var stream = fs.createReadStream(inputFileName, {encoding: 'utf8'}); 

如果需要:

 writableStream = fs.createWriteStream(outputFileName, {defaultEncoding: 'utf8'}); 

尝试读取您的文件与binary编码选项。 我不得不读一些带有重音字符的csv,而且它的效果很好。

 var stream = fs.createReadStream(inputFileName, { encoding: 'binary' });