excel-stream Unknown Encoding错误问题

2017年10月15日 · 59 字 · 1 分钟

项目上线有半年多了,一直没有出过问题,但是前几天升级过一次NodeJs到8.x的时候就出现过这个问题了。因为采用了消息队列,但是一到这里就挂,导致进程重复启动几百次。

报错信息

excel-stream/csv-stream/index.js 59 Buffer unknow encoding

问题排查

google了一下无果,后面发现反正源码反正自己有,倒不如自己改改,直接定位到相关代码即可。

CSVStream.prototype.write = function(buffer,encoding){
	this._encoding = encoding || this._encoding;
	if(this._ended) throw new Error('Cannot write after end has been called.');
	if(buffer) this._buffer = Buffer.concat([this._buffer, buffer], this._buffer.length + buffer.length);
	if(this._paused) return false;
	this._parser.parse(this._buffer.toString(this._encoding));
	this._buffer = new Buffer(0);
	return !this._paused;
}

报错具体行数是this._parser.parse(this._buffer.toString(this._encoding));,错误很明显了,提示encoding错误。

那直接往上面找,发现this._encoding = encoding || this._encoding,这里就有可能传入的encoding导致了错误。

问题解决

这个项目已经3年没维护了,所以要修正问题的话,只能手动改了。

修改办法如下

	this._parser.parse(this._buffer.toString(this._encoding));

改为

	this._parser.parse(this._buffer.toString());

重新运行之后没有发现问题。