The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск libtorrent 2.0 с поддержкой протокола BitTorrent 2, opennews (??), 07-Сен-20, (0) [смотреть все] +2

Сообщения [Сортировка по времени | RSS]


20. "Выпуск libtorrent 2.0 с поддержкой протокола BitTorrent 2"  +1 +/
Сообщение от Аноним (20), 07-Сен-20, 11:02 
Могли бы ещё от дурацкого bencoding отказаться.

Чтобы распарсить строку в bencoding, нужно:
1. Понять, что перед нами строка. Т.е. мы находимся в списке, в начале элемента; или словаре, в начале ключа или значения, и под курсором находится цифра;
2. Считать цифры до ':';
3. Перевести последовательность цифр в Int32 число. В стандарте не описано - какая разрядность чисел в bencoding, но большинство торрент-клиентов использует Int32;
4. Считать полученное количество байт после ':' в массив
5. Перевести массив байт в строку. Для этого нужно угадать её кодировку. Скорее всего она в UTF-8, но в старых торрентах, она может быть в 1251 или в какой-нибудь китайской чепушне. В торренте есть параметр encoding, но он часто врёт.

Я ни одного генератора парсеров не знаю, который справился бы с такой грамматикой.

Ответить | Правка | Наверх | Cообщить модератору

24. "Выпуск libtorrent 2.0 с поддержкой протокола BitTorrent 2"  +1 +/
Сообщение от Аноним (24), 07-Сен-20, 11:42 
Генератор, может, и не справится, но на Сях кодируется очень легко ручками.
Ответить | Правка | Наверх | Cообщить модератору

69. "Выпуск libtorrent 2.0 с поддержкой протокола BitTorrent 2"  +/
Сообщение от Аноним (69), 07-Сен-20, 21:52 
>В стандарте не описано - какая разрядность чисел в bencoding,
> но большинство торрент-клиентов использует Int32

Integers have no size limitation. Это безразмерное число и не может быть, что большинство клиентов используют int32, ведь они не смогут работать с файлами более 2 Гб.

>5. Перевести массив байт в строку. Для этого нужно угадать её кодировку.

Честно говоря я ещё не разу не видел торрента в котором имена файлов не в латинице. И даже если они есть, реализация try_parse_utf8() работает довольно безошибочно благодаря весьма специфическому формату UTF8. Если речь не про имена файлов, то строки вообще нельзя преобразовывать. Это byte-array и вполне могут содержать нули и прочие чисто бинарные байты.

>Я ни одного генератора парсеров не знаю, который справился бы с такой грамматикой.

Bencode это бинарный формат, хоть и похож на текстовый, а генераторы парсеров созданы для разбора текста. Хотя я сомневаюсь в истинности Вашего утверждения, так как есть Python в котором содержимое блока определяется числом пробелов до первого не пробельного символа в строке. Распарсить 5:hello не сложнее чем блок кода в Python.

Ответить | Правка | К родителю #20 | Наверх | Cообщить модератору

84. "Выпуск libtorrent 2.0 с поддержкой протокола BitTorrent 2"  +1 +/
Сообщение от Аноним (84), 08-Сен-20, 10:53 
>не может быть, что большинство клиентов используют int32, ведь они не смогут работать с файлами более 2 Гб

Не связано с размером файла. С размером и количеством файлов в торренте связано другое ограничение: в большинстве торрент-клиентов список и словарь не могут иметь иметь более Int32 элементов.

>Честно говоря я ещё не разу не видел торрента в котором имена файлов не в латинице.

Какой-то маленький у вас опыт использования торрентов. Японские порномультики часто называются на японском или, если их выложили китайцы, на китайском; книги и фильмы на рутрекере часто называются на кириллице; музыкальные альбомы часто содержит умляуты в названиях треков. Я взял 20000 торрент-файлов, которые накопились у меня за 15 лет, и в половине из них содержались не UTF-8 строки. Вдобавок, торрент файл может содержать текст не только в именах файлов.

>генераторы парсеров созданы для разбора текста

Генераторы парсеров созданы для разбора формального языка.

>Хотя я сомневаюсь в истинности Вашего утверждения

Я тоже. Поэтому я написал в эту темку в надежде, что кто-нибудь назовёт меня идиотом и приведёт EBNF который парсит bencoding.

Ответить | Правка | Наверх | Cообщить модератору

120. "Выпуск libtorrent 2.0 с поддержкой протокола BitTorrent 2"  –1 +/
Сообщение от InuYasha (??), 10-Сен-20, 00:25 
>Честно говоря я ещё не разу не видел торрента в котором имена файлов не в латинице.

ШТА!? Если ты из United Blacks of America, то возможно. Но в остальном мире у меня для тебя новости...

Ответить | Правка | К родителю #69 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру