C# 跳过unicode字符的最快方法是什么

C# 跳过unicode字符的最快方法是什么,c#,unicode,file-io,C#,Unicode,File Io,我试图获取UTF-16格式文件中的某些字符 我知道我想跳过多少个字符。我目前正在使用TextReader.ReadBlock命令来读取我要跳过的所有字符的临时数组,但我相信设置位置会更快。我只是不知道如何确定新的职位 如果要跳过多少个字符,知道在unicode文件中跳到某个位置的最快方法是什么吗?考虑到此操作系统是UTF-16,而不是UTF-8(字符大小可能不同),每个字符有2个字节。因此,要跳过x个字符,您必须跳过x*2个字节。跳过一个需要相对定位的块并不容易 如果可以计算下一个块的开始(从文

我试图获取UTF-16格式文件中的某些字符

我知道我想跳过多少个字符。我目前正在使用
TextReader.ReadBlock
命令来读取我要跳过的所有字符的临时数组,但我相信设置位置会更快。我只是不知道如何确定新的职位


如果要跳过多少个字符,知道在unicode文件中跳到某个位置的最快方法是什么吗?

考虑到此操作系统是UTF-16,而不是UTF-8(字符大小可能不同),每个字符有2个字节。因此,要跳过x个字符,您必须跳过x*2个字节。

跳过一个需要相对定位的块并不容易

如果可以计算下一个块的开始(从文件开始的偏移量),则可以:

        int nextPos = ...;

        reader.DiscardBufferedData();
        reader.BaseStream.Position = nextPos;
        line = reader.ReadLine();

您可能需要调整计算,因为UTF-16文件可以有一个BOM表(2个前导字节)。

UTF-16还可以包含pseuo对(4个字节/字符)。不太可能,但仍然如此。而且你必须同步TexReader和流,这很棘手。只有当你忽略组合字符、代理项等时才是如此。@Henk:据我所知,代理项在.NET中是按2个字符(每个2字节)对分割的。所以他们应该“符合”一般规则。这似乎对我不起作用。它适用于文件的开头,但很快就停止了。您的文件和跳过块有多大?由于utf-16编码的问题,它们的长度高达100兆字节。如果不实际读取文件,您无法知道要跳过多少cr/lf行结束字符。