0

次のように、ファイルを1行ずつアップロードして解析しようとしています。

var fs = require('fs'),
    es = require('event-stream'),
    filePath = './file.txt';

fs.createReadStream(filePath)
  .pipe(new Iconv('cp866', 'windows-1251'))
  .pipe(es.split("\n"))
  .pipe(es.map(function (line, cb) {
     //do something with the line

     cb(null, line)
   }))
  .pipe(res);

しかし、残念ながら、utf-8 エンコーディングで 'line' 文字列を取得します。evented-stream 変更エンコーディングを防ぐことは可能ですか?

4

1 に答える 1

0

event-stream は、古いバージョンのストリームに基づいています。そして、IMO、やりすぎです。

代わりに使用through2します。しかし、それには少し余分な作業が必要です。

var fs = require('fs'),
    thr = require('through2'),
    filePath = './file.txt';

fs.createReadStream(filePath)
  .pipe(new Iconv('cp866', 'windows-1251'))
  .pipe(thr(function(chunk, enc, next){
    var push = this.push
    chunk.toString().split('\n').map(function(line){
      // do something with line 
      push(line)
    })
    next()
  }))
  .pipe(res);

toString()明らかに、自分でバッファーを呼び出して操作することを避けることができます。

through2は a の薄いラッパーであり、stream.Transformより詳細に制御できます。

于 2014-05-18T00:34:47.913 に答える