2016-01-25 39 views
1

我正在使用一个小库节点爬虫(https://github.com/sylvinus/node-crawler),它允许我也下载二进制文件。问题是,它不会响应的缓冲区转换为字符串,在这一行https://github.com/sylvinus/node-crawler/blob/6822559cd2b49aa69e39ff07d61ca92b76fe03ca/lib/crawler.js#L434节点二进制Buffer.toString(),转换回缓冲区

response.body = response.body.toString(); //response.body was a Buffer 

我在自己的回调response对象得到,我试图把它用正确的值转换回缓冲区。

原始

<Buffer ff d8 ff e1 00 18 45 78 69 66 00 00 49 49 2a 00 08 00 00 00 00 00 00 00 00 00 00 00 ff ec 00 11 44 75 63 6b 79 00 01 00 04 00 00 00 4b 00 00 ff e1 03 ... > 

我尝试 '解码' 它下面,但没有运气(它调用的ToString()前):

Buffer(response.body, 'binary')

<Buffer fd fd fd fd 00 18 45 78 69 66 00 00 49 49 2a 00 08 00 00 00 00 00 00 00 00 00 00 00 fd fd 00 11 44 75 63 6b 79 00 01 00 04 00 00 00 4b 00 00 fd fd 03 ... > 

new Buffer(response.body)

<Buffer ef bf bd ef bf bd ef bf bd ef bf bd 00 18 45 78 69 66 00 00 49 49 2a 00 08 00 00 00 00 00 00 00 00 00 00 00 ef bf bd ef bf bd 00 11 44 75 63 6b 79 00 ... > 

所以我的问题是:如何从该字符串表示中找回正确的原始缓冲区?

+0

不管是库还是将缓冲区转换为字符串,我都想提到'toString()'默认为utf8编码。所以假设你有正确的字符串表示形式,'新的缓冲区(yourString,'utf8')'应该是正确的,而不是'二进制' – johnnycrab

+0

@johnnycrab不幸的是不起作用。 –

回答

0

你不能。这显然是known bug。您可以将其分解并修复,然后将PR返回到原始回购协议和/或至少在前面的链接问题上发表您的意见。

+0

我想这不是库本身的错误,而是NodeJS当前缓冲区实现的限制。 –

相关问题