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

时间:2010-10-04 20:28:54

标签: 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);

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

1 个答案:

答案 0 :(得分:5)

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

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