Bencode(發音為Bee-Encode)是BitTorrent用在傳輸資料結構的編碼方式。這種編碼方式支援四種資料型態:

Bencode最常被用在.torrent檔中,檔案裡的元數據都是被Bencode編碼過的字典表。這種編碼方法也被Tracker返迴響應時使用。

雖然比用純二進制編碼效率低,但Bencode結構簡單而且不受字節存儲順序影響(所有數字以十進制編碼),這對於跨平台性非常重要。並且,Bencode具有較好的靈活性,即使存在故障的字典鍵,只要將其忽略並更換新的就能兼容補充。

編碼方法

編輯

Bencode使用ASCII字符進行編碼。

  • 一個整型數會以十進制數編碼並括在i和e之間,不允許前導零(但0依然為整數0),負數如十進制表示一樣使用前導負號,不允許負零。如整型數「42」編碼為「i42e」,數字「0」編碼為「i0e」,「-42」編碼為「i-42e」。
  • 一個以字節為單位表示的字符串(字符串的字為一個字節,不一定是一個字符)會以(长度):(内容)編碼,長度的值和數字編碼方法一樣,只是不允許負數;內容就是字符串的內容,如字符串「spam」就會編碼為「4:spam」,本規則不能處理ASCII以外的字符串,為了解決這個問題,一些BitTorrent程序會以非標準的方式將ASCII以外的字符以UTF-8編碼轉化後再編碼。
  • 線性表會以l和e括住來編碼,其中的內容為Bencode四種編碼格式所組成的編碼字串,如包含和字符串「spam」數字「42」的線性表會被編碼為「l4:spami42ee」,注意分隔符要對應配對。
  • 字典表會以d和e括住來編碼,字典元素的鍵和值必須緊跟在一起,而且所有鍵為字符串類型並按字典順序排好。如鍵為「bar」值為字串「spam」和鍵為「foo」值為整數「42」的字典表會被編碼為「d3:bar4:spam3:fooi42ee」。

對於線性表和字典的取值範圍並沒有限制,它們通常會包含其他元素,這樣就允許對很複雜的數據結構進行編碼。

外部連結

編輯