在咱国内有很多有趣的文字,其中藏文属于有趣的文字里面特别有趣的一项,特别是对于做文本库的同学,大概都知道什么叫合写字吧。合写字的含义就是多个字符一起组成一个字。但是多个字符在内存中,本身就是多个字符对象,以往统计某个字符串的字数,咱简单判断只是拿字符串的字符数量进行获取。这个方法在藏文下肯定是不可行的,藏文的一个字由多个字符组成,因此需要本文介绍的特别的方法
先给大家来一个简单的藏文字 དིོེུ 这个字其实是由 ད + ུ + ི + ོ + ེ 这几个字符组成的
用 string.Length 获取到的 དིོེུ 这个字也是符合预期 5 个字符,当然这也是不符合预期的字数
这是关于语言文化方面的内容,自己写一定是不靠谱的。好在 .NET 里面提供的权威的获取方法,通过 StringInfo 类的辅助,可以获取可视效果下的字符串的字数
var info = new StringInfo("དིོེུ"); var realLength = info.LengthInTextElements; // realLength = 1
通过此即可获取正确的字符长度
额外的,如果想要枚举一个藏文句子的每个藏文的字。那肯定不能使用字符的遍历方式,否则输出就和汉字的遍历输出为偏旁一样了。遍历藏文,需要使用 StringInfo.GetTextElementEnumerator 方法,例子如下
var enumerator = StringInfo.GetTextElementEnumerator("ཀྲུང་ཧྭ་མི་དམངས་སྤྱི་མཐུན་རྒྱལ་ཁབ།"); while (enumerator.MoveNext()) { Console.WriteLine(enumerator.GetTextElement()); }
参阅: