跳至內容

Bencode

出自Taiwan Tongues 台語維基
於 2025年8月23日 (六) 21:34 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

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

  • 字捾
  • 整數
  • 串列
  • 字典表

Bencode 上捷被用佇咧 . torrent 檔中,檔案內底的元資料攏是去予 Bencode 編碼過的字典表。這種編碼方法嘛予人 tracker 返迴響應的時陣使用。

雖然比用純二進位編碼效率較低,猶毋過 Bencode 結構簡單而且無受位元組儲存順序影響(所有的數字就十進位編碼), 這對迒平台性非常的重要。並且,Bencode 具有較好的靈活性,就算佇故障的字典入去,只要共其忽略閣較換新的就會當相容補充。

編碼方法

Bencode使用 ASCII 字元進行編碼。

  • 一个整型數會以十進位數編碼並括佇咧 i 和 e 之間,無允准前導零(毋過零猶原是整數零), 負數若十進位表示仝款使用前導負號,無允准負零。如整個的數「四十二」編碼為「` i 四十二 e `」,數字「零」編碼為「` i 零 e `」,「 抹四十二」編碼為「` i 抹四十二 e `」。
  • 一个以位元組為單位表示的字串(字串的字替一个位元組,無一定是一字元)會以 `(鋪排):(ua-sá容)` 編碼,長度的值和數字編碼方法仝款,只是無允准負數;內容就是字串的內容,如字捾「spam」伊就會編碼為「` 四 : spam `」,本規則袂當處理 ASCII 以外的字攕,為著欲解決這个問題,一寡仔 BitTorrent 程式會以非標準的方式將 ASCII 以外的字元以 UTF 鋪八編碼轉化了後閣編碼。
  • 線性表會以 l 和 e 括蹛來編碼,內底的內容為這內底 Bencode 四種編碼格式所組成的編碼字串,如包含和字串「spam」數字「四十二」的線性表會予人編碼做「` l 四 : spami 四十二 ee `」,注意分隔符愛對應配對。
  • 字典表會以 d 和 e 括蹛來編碼,字典元素的鍵佮值著愛綴牢,而且所有鍵為字串類型並按字典順序排予好勢。如鍵為「bar」值為字串「spam」佮鍵為「foo」值為整數「四十二」的字典表會去予人編碼為「` d 三 : bar 四 : spam 三 : fooi 四十二 ee `」。

對線性表猶閣有字典的取值範圍並無限制,𪜶通常會包括其他的元素,按呢就允准對足複雜的資料結構進行編碼。

外部連結

  • Another BitTorrent protocol specification
  • File \ _ Bittorrent 二-Another PHP Bencode / decode implementation
  • The original BitTorrent implementation in Python as standalone package
  • BEncode Editor
  • bencode-tools-a C library for manipulating bencoded data and a XML schema like validator for bencode messages in Python
  • Bencode parsing in Java
  • Bencode parsing in C