我正在使用这个编码 https://github.com/dampcake/bencode 来解码一个种子文件。我有一个问题:编码的种子文件看起来像这样:
d8:announce21:http://127.0.0.1: ....etc..... piece lengthi65536e6:pieces28300:a�ډ|E���� ���#-14 .....etc........
问题是,当我在"解码器"中输入此字符串时,由于符号的原因,我会收到错误。这是我的问题:我应该在这些符号之前停止解码吗?还是整个字符串都需要正确解码.torrent文件?
从我所读到的内容来看,我需要在字典末尾停止解码,即当我遇到最后一个"e"时,但我不知道如何正确识别它。
谢谢
更新:
这是我的代码:
byte[] to_decode = null;
try {
Path path = Paths.get("/user/.../file.torrent");
to_decode = Files.readAllBytes(path);
} catch (IOException e) {
System.out.println(e.toString());
}
//System.out.println(to_decode.toString());
Bencode bencode = new Bencode();
Map<String, Object> dict = bencode.decode(to_decode, Type.DICTIONARY);
System.out.println(dict);
当我运行它时,我没有错误,但这种输出:
f<�>�0�1FT���n" ......etc...... 4'}$�Q�3�� Җk�, private=0}}
因此,考虑到括号,我认为输出是字典,但不是可用的格式,我似乎无法使其工作
有什么建议吗?
以下规范 https://en.wikipedia.org/wiki/Bencode 6:pieces28300:a
意味着有一个 28300 字节长的字符串。所以它也应该被解析。您应该在字典末尾停止,但它不在6:pieces28300:a
中(它在末尾)。
长度和指示您正在处理二进制数据。您没有指定错误,也没有指定您使用的源代码,但您使用了错误的字符编码。因此,请检查编码种子文件数据的字符编码,并确保在 Bencode 构造函数中使用相同的编码。