在传递之前对 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
});

所以我的想法是将 decodeStreamencodeStream 结合起来,这样我就可以再次获得一个流,并可以将其以正确编码的 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
      });