2016-01-25 64 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當前緩衝區實現的限制。 –

相關問題