问题是在Javascript字符串中编码和存储二进制数据。http://nodejs.org/api.html的“缓冲区”下有一个很好的章节。
不幸的是,解决此问题的最简单方法是更改请求npm。我必须
response.setEncoding('binary');在下面varbuffer;的/path/to/lib/node/.npm/request/active/package/lib/main.js中的第66行添加。这将对此请求正常运行,但对其他请求则无效。您可能想要修改它,以便仅基于其他通过的选项进行设置。
然后
var buf = new Buffer(body),我更改为
var buf = new Buffer(body,'binary');。之后,一切正常。
如果您确实不想触摸请求npm,则另一种方法是在responseBodyStream参数中传入一个实现Writable
Stream的对象来请求。然后,该对象会将来自响应的流数据存储在其自己的缓冲区中。也许有一个已经在执行此操作的库…我不确定。
我现在将其保留在此处,但是如果您想让我澄清任何事情,请随时发表评论。
编辑
查看评论。
http://gist.github.com/583836的新解决方案



