bencode和torrent文件出错

时间:2017-10-18 09:13:23

标签: java encoding decoding torrent

我正在使用此bencode https://github.com/dampcake/bencode来解码torrent文件。我有一个问题: 编码的torrent文件看起来像这样:

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}}

所以,考虑到括号,我认为输出是字典但不是可用的格式,我似乎无法使它工作

有什么建议吗?

1 个答案:

答案 0 :(得分:-1)

遵循规范https://en.wikipedia.org/wiki/Bencode 6:pieces28300:a表示有一个28300字节长的字符串。所以它也应该被解析。你应该停在字典的末尾,但它不在6:pieces28300:a(它在最后) 长度和 都表示您正在处理二进制数据。您没有指定错误,既没有使用您正在使用的源代码,也没有使用错误的字符编码。因此,请检查编码的torrent文件数据的字符编码,并确保在Bencode构造函数中使用相同的编码。