Разница в размерах при чтении файла в кодировке UTF8 - PullRequest
1 голос
/ 05 октября 2010

Я пытаюсь прочитать файл в кодировке UTF8 (.torrent). В файле есть раздел «кусочки». Сразу после этого - длина текста, содержащего последовательность хэшей SHA1. Файл сообщает длину (скажем, 130100) для чтения, но при чтении я заканчиваю тем, что прошёл EOF.

Я не уверен, почему это происходит. Файлы хорошие (я проверил их на существующих торрент-клиентах и ​​попробовал несколько из них с единообразными результатами), и я читаю их так:

string contents = string.Empty;
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)
{
    using (StreamReader reader = new StreamReader(fs, Encoding.UTF8))
    {
        contents = reader.ReadToEnd();
    }
}

parse(contents);

Однако это, очевидно, не работает. Я неправильно читаю файл или неправильно храню его в строке перед тем, как попытаться разобрать его? Кажется, что это только ошибка, когда он читает символы вне нормального диапазона читаемых строк.

1 Ответ

5 голосов
/ 05 октября 2010

Файлы BitTorrent не имеют кодировки UTF-8.Некоторые или все имена файлов в свойстве files->path / name могут быть строками в кодировке UTF-8, но файл в целом является чисто двоичным, а содержимое свойства pieces является двоичной строкой, содержащей хэши,Нет смысла пытаться читать .torrent с TextReader.

. Формат, в котором хранятся файлы BitTorrent, представляет собой простую сериализацию структурированных значений, известную как bencode .Вы можете использовать правильный анализатор bencode для извлечения информации из .torrent-файла.Нетрудно написать один (в конце концов, вы получаете только четыре типа данных) или посмотрите список библиотек теории для пары существующих библиотек .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...