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

开始吧.我目前正在使用npm fast-csv,这是一个非常简单明了的很好的CSV读写器.我试图做的是将它与iconv一起使用来处理“重音”字符和非ASCII字符,并将它们转换为ASCII等效字符或根据字符删除它们.

我当前使用fast-csv进行的过程是通过读取流引入一个块进行处理(以一行形式出现),暂停读取流,处理数据,将数据传输到写入流然后恢复读取使用回调流. Fast-csv目前根据来自读取流的数据格式知道在哪里分离块.

整个过程如下:

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来编码数据流,因为它来到可用的东西.然而,这提出了一个更大的问题,因为fast-csv将不再知道由于现在编码的数据而在哪里拆分块(行).由于我将使用的CSV的大小,这是一个问题;将整个CSV加载到缓冲区然后解码将不是一个选项.

如果没有在我的代码中编写自己的CSV解析器,我是否可以解决这个问题?

最佳答案 尝试使用二进制文件读取文件以获取编码选项.我不得不阅读一些带有一些重音字符的csv,并且它工作得很好.

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