0

我正在尝试按如下方式逐行上传和解析文件:

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' 字符串。是否可以防止事件流更改编码?

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 回答