我正在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