【问题标题】:Do some work on a node.js Readable stream before it is passed on在传递之前对 node.js 可读流做一些工作
【发布时间】:2016-01-23 17:17:45
【问题描述】:

我想从 zip 文件中的文件中读取数据,并将这些数据以较小的块形式发布到服务器。由于文件很大,我想在 node.js 中使用流。

我使用 yauzl 从 zip 和 readline 读取它,所以我不必自己处理行尾(这是一个 CSV 文件)。但还有一个问题:zip 文件中的数据以LATIN1 编码,我需要将其发布为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 配置中使用它,或者在我可以将其作为ìnput 提供给readline 的变量中“结束”管道。

【问题讨论】:

    标签: node.js stream iconv


    【解决方案1】:

    我是如此接近,解决方案很简单:

          var rd = readline.createInterface({
              input: readStream.pipe(iconv.decodeStream('LATIN1')).pipe(iconv.encodeStream('utf8')),
              output: process.stdout,
              terminal: false
          });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 2015-06-05
      • 2012-03-28
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多