在传递之前对 node.js 可读流做一些工作
Do some work on a node.js Readable stream before it is passed on
我想从 zip 文件中的文件中读取数据,然后 post 将这些数据以较小的块形式发送到服务器。由于文件很大,我想在 node.js.
中使用流
我使用 yauzl
从 zip 和 readline
读取它,所以我不必自己处理行尾(这是一个 CSV 文件)。但是仍然存在一个问题:zip 文件中的数据以 LATIN1
编码,我需要将其 post 编码为 UTF8
。在 iconv-lite
的帮助下,我可以在控制台上将可读流正确转换为 UTF8:
rd.on('data', function(data) {
console.log(iconv.decodeStream(data, 'LATIN1'));
});
现在我的问题是我想使用需要以下配置的 readLine
:
var rd = readline.createInterface({
input: readStream,
output: process.stdout,
terminal: false
});
所以我的想法是将 decodeStream
和 encodeStream
结合起来,这样我就可以再次获得一个流,并可以将其以正确编码的 UTF8 传输到 readline
。
readStream.pipe(iconv.decodeStream('LATIN1').pipe(iconv.encodeStream('utf8'))
但我看不出如何在 readline
配置中使用它或 "end" 变量中的管道,我可以将其作为 ìnput
提供给 readline
].
我太接近了,解决方法很简单:
var rd = readline.createInterface({
input: readStream.pipe(iconv.decodeStream('LATIN1')).pipe(iconv.encodeStream('utf8')),
output: process.stdout,
terminal: false
});
我想从 zip 文件中的文件中读取数据,然后 post 将这些数据以较小的块形式发送到服务器。由于文件很大,我想在 node.js.
中使用流我使用 yauzl
从 zip 和 readline
读取它,所以我不必自己处理行尾(这是一个 CSV 文件)。但是仍然存在一个问题:zip 文件中的数据以 LATIN1
编码,我需要将其 post 编码为 UTF8
。在 iconv-lite
的帮助下,我可以在控制台上将可读流正确转换为 UTF8:
rd.on('data', function(data) {
console.log(iconv.decodeStream(data, 'LATIN1'));
});
现在我的问题是我想使用需要以下配置的 readLine
:
var rd = readline.createInterface({
input: readStream,
output: process.stdout,
terminal: false
});
所以我的想法是将 decodeStream
和 encodeStream
结合起来,这样我就可以再次获得一个流,并可以将其以正确编码的 UTF8 传输到 readline
。
readStream.pipe(iconv.decodeStream('LATIN1').pipe(iconv.encodeStream('utf8'))
但我看不出如何在 readline
配置中使用它或 "end" 变量中的管道,我可以将其作为 ìnput
提供给 readline
].
我太接近了,解决方法很简单:
var rd = readline.createInterface({
input: readStream.pipe(iconv.decodeStream('LATIN1')).pipe(iconv.encodeStream('utf8')),
output: process.stdout,
terminal: false
});