URL-编码一个字节字符串?
Posted
技术标签:
【中文标题】URL-编码一个字节字符串?【英文标题】:URL-Encoding a Byte String? 【发布时间】:2012-07-18 08:38:02 【问题描述】:我正在编写一个 Bittorrent 客户端。其中一个步骤要求程序向跟踪器发送一个 HTTP GET 请求,其中包含部分 torrent 文件的 SHA1 哈希。我已经使用 Fiddler2 拦截了 Azureus 发送给 tracker 的请求。
Azureus 发送的哈希是 URL 编码的,如下所示:%D9%0C%3C%E3%94%18%F0%C5%D9%83X%E03I%26%2B%60%8C%BFR
在 URL 编码之前,哈希应该如下所示:d90c3ce39418f0c5d98358e03349262b608cbf52
我注意到它并不像每两个字符放置一个'%'符号那么简单,那么我将如何对这个 BYTE 字符串进行编码以得到与 Azureus 相同的值。
提前致谢。
【问题讨论】:
【参考方案1】:实际上,您可以每两个字符放置一个 % 符号。 Azureus 不这样做,因为例如,R
是 URL 中的安全字符,52
是 R
的十六进制表示,因此它不需要对其进行百分比编码。使用%52
是等效的。
【讨论】:
【参考方案2】:从左到右遍历字符串。如果遇到%
,输出接下来的两个字符,将大写转换为小写。如果遇到其他情况,请使用小写字母以十六进制输出该字符的 ASCII 代码。
%D9 %0C %3C %E3 %94 %18 %F0 %C5 %D9 %83 X %E0 3 I %26 %2B %60 %8C %BF R
X 的 ASCII 码是 0x58,所以它变成了58
。 3 的 ASCII 码是 0x33。
(我有点不明白你为什么要问。你的问题清楚地表明你认为这是 URL 编码的。)
【讨论】:
我认为问题是关于编码,而不是解码。 没有区别。这个过程显然是可逆的。 (问题指出它只是 URL 编码的!) 我还没有意识到 ascii 字符可以用来表示字节,谢谢你的澄清! :)以上是关于URL-编码一个字节字符串?的主要内容,如果未能解决你的问题,请参考以下文章