读取UTF8编码文件时的大小差异

Ste*_*ers 1 c# encoding utf-8

我正在尝试读取UTF8编码文件(.torrent).在文件中有一个"件"部分.紧接着是包含一系列SHA1哈希值的文本的长度.该文件报告要读取的长度(例如130100),但在阅读时我最终通过了EOF.

我不确定为什么会这样.这些文件很好(我已经使用现有的torrent客户端对它们进行了测试,并且我尝试了一些具有一致结果的文件)并且我正在阅读它们:

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);
Run Code Online (Sandbox Code Playgroud)

但是,这显然不起作用.我是否错误地读取文件,或者在尝试解析文件之前将其存储在字符串中?当它读取正常范围的可读字符串之外的字符时似乎只是错误.

bob*_*nce 5

BitTorrent文件不是UTF-8编码的.files->path/ nameproperty 中的部分或全部文件名可能是UTF-8编码的字符串,但整个文件纯粹是二进制文件,pieces属性的内容是包含哈希值的二进制字符串.尝试阅读.torrent是没有意义的TextReader.

存储BitTorrent文件的格式是一种简单的结构化值序列化,称为bencode.您将需要使用正确的bencode解析器从.torrent文件中提取信息.编写一个(毕竟,您只获得四种数据类型)并不难,或者查看几个现有.NET库的理论库列表.