2012-12-23 66 views
2

我試圖解碼JavaScript中的torrent文件,長度不是很好。JavaScript bencode二進制長度

path = "file.torrent"; 
$.ajax({ 
    url: path, 
    success: function (data) { 
     console.log(data.length); 
    } 
}); 

我在PHP中做了同樣的事情,長度不同。

$f=file_get_contents($filename, FILE_BINARY); 
var_dump(strlen($f)); 

我認爲ajax方法不返回二進制文件。

我怎樣才能得到類似於JavaScript中的file_get_contents($ filename,FILE_BINARY)?

+2

JavaScript對二進制數據不太好。除非你有一個現代的瀏覽器/ js引擎,否則你根本無法處理它。 – ThiefMaster

+0

我想冒險一個猜測:如果你還沒有用'application/octet-stream'的'Content-Type'服務它。 – Ryan

回答

0

您可以在processData開關設置爲false:

$.ajax({ 
    url: path, 
    processData: false, 
    success: function (data) { 
     console.log(data.length); 
    } 
}); 

現在jQuery將不會試圖成爲智能自動解析基於您的服務器返回的內容類型響應頭的數據,但它會通過它以成功回調爲原始數據。很顯然,在JavaScript中處理二進制數據不是這種語言設計的。 HTML5雖然有一些很好的補充。

另外值得一提的是,對從服務器收到的某些二進制數據調用.length可能沒有什麼意義,並且您可能會得到一個javascript錯誤,因爲此屬性未定義。

+0

我添加processData:false但長度仍然錯誤我怎麼才能得到它rigth?因爲我需要長度來檢查文件的完整性是否正常 – user1014102

+0

但是在數據實例中是否還有'length'屬性?你有沒有嘗試將數據記錄到控制檯?它看起來怎樣? –

+0

它看起來像一個字符串,但其中一部分是二進制的,如這裏所描述的http://wiki.theory.org/BitTorrentSpecification – user1014102

相關問題