2011-09-28 57 views
0

我想在UTF-16格式的文件中找到某些字符。什么是跳过Unicode字符的最快方法

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

任何想法如果您想要跳过多少个字符,跳到一个unicode文件中某个位置的最快方法是什么?

+0

你的文件和跳过块有多大? –

+0

他们得到了100兆字节 – Nick

+0

由于utf-16编码的问题,你不知道有多少cr/lf行结束字符跳过而没有实际读取文件。 –

回答

0

跳过一个块并不容易,这需要相对定位。

如果你可以计算下一个块(从文件开始的偏移量)的begiining它是可行的:

 int nextPos = ...; 

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

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

-1

考虑到这个os UTF-16而不是UTF-8(其中字符大小可以变化),每个字符有2个字节。所以要跳过x个字符,您必须跳过x * 2个字节。

+0

UTF-16也可以包含pseuo对(4字节/字符)。非常不可能,但仍然。你将不得不同步TexReader和流,棘手。 –

+0

只有当你忽略组合字符,代理等时,这才是真实的。 –

+0

@亨克:我知道的代理项目在.NET中分为2个字节,每个字节2个字节。所以他们应该“符合”一般规则。 – Tigran

相关问题