JSA*_*kis 6 javascript csv node.js
开始。我目前正在使用 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);
Run Code Online (Sandbox Code Playgroud)
我目前遇到的问题是,我注意到由于某种原因,当我的 javascript 编译时,它本身并不能识别非 ASCII 字符,所以我不得不使用 npm iconv-lite 来对数据流进行编码进入一些可用的东西。然而,这带来了一个更大的问题,因为由于现在编码的数据,fast-csv 将不再知道在哪里分割块(行)。由于我将使用的 CSV 的大小,这是一个问题;将整个 CSV 加载到缓冲区中然后进行解码将不是一个选项。
有没有关于如何在不将自己的 CSV 解析器写入代码的情况下解决这个问题的建议?
binary尝试使用编码选项读取文件。我必须阅读一些带有一些重音字符的 csv,并且效果很好。
var stream = fs.createReadStream(inputFileName, { encoding: 'binary' });
Run Code Online (Sandbox Code Playgroud)
除非我误解,否则您应该能够通过将流上的编码设置为utf-8(文档)来解决此问题。
对于第一行:
var stream = fs.createReadStream(inputFileName, {encoding: 'utf8'});
Run Code Online (Sandbox Code Playgroud)
如果需要的话:
writableStream = fs.createWriteStream(outputFileName, {defaultEncoding: 'utf8'});
Run Code Online (Sandbox Code Playgroud)