我正在Django框架之上寫一個小型的Bittorrent跟蹤器,作爲大型項目的一部分。但是,我在解碼通告請求的「info_hash」參數時遇到問題。Django沒有正確翻譯Bittorrent查詢字符串
基本上,uTorrent採用有問題的torrent的SHA1哈希值,並且URL對它的十六進制表示進行編碼,然後將它作爲info_hash參數發送到GET請求中的跟蹤器。
的info_hash
A44B44B0EE8D85A9F7135489D522A19DA2C87C91
編碼爲:
%a4KD%b0%ee%8d%85%a9%f7%13T%89%d5%22%a1%9d%a2%c8%7c%91
然而,Django的解碼這將Unicode字符串:
u'\ufffdKD\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\x13T\ufffd\ufffd"\ufffd\ufffd\ufffd\ufffd|\ufffd'
,而不是一個字符串文字是這樣的:
\xa4KD\xb0\xee\x8d\x85\xa9\xf7\x13T\x89\xd5"\xa1\x9d\xa2\xc8|\x91
如何阻止Django嘗試將info_hash轉換爲Unicode,以便我可以取消引用它?我的目標是獲得一個字符串文字,然後我可以編碼爲一個十六進制字符串。
有什麼想法?道歉,如果有一些關於我錯過的編碼的概念。謝謝!
謝謝,我不知道是否有一個更優雅的方式來做到這一點。 – Alex 2010-02-14 21:24:25