我正在使用bencoding,我想将bencoded字符串保留为java字符串,但它们包含二进制数据,因此盲目地将它们转换为字符串将损坏数据。我试图实现的是一个转换函数,它将ascii字节保持为ascii,并以可逆的方式对非ascii字符进行编码。
我发现了一些我试图用python实现的示例,但我对python的了解还不够深入。这个解码器正是我想做的:torrent的ascii部分保持为ascii,但是sha1散列被打印为“\xd8r\xe7”。虽然我对python的了解非常有限,但他似乎并没有对字符串做任何特殊的处理;这是由python解释器处理的吗?我能用java实现同样的功能吗?
我玩过一些编码,比如base64或使用integer.tohexstring,但最后得到了不可读的ascii字符串。
我还发现了一个scheme示例,它打印除sha1散列以外的所有内容。
2条答案
按热度按时间qyzbxkaa1#
本编码字符串是字节字符串。您可以尝试用
String(byte[] bytes, Charset charset)
. 使用某些编码(如iso-8859-1)进行解码总是会成功,因为任何字节都直接Map到一个码点。对于许多这样的编码(包括iso-8859-1),这个过程也是可逆的。6kkfgxo02#
如果wikipedia在bencode上是准确的,那么格式就足够简单了。直接解析字节数据:
将二进制字符串存储在仅在显式执行时将其转换为ascii的类型中,如下所示
toString
电话: