我正在寻找一种方法来计算由多个字符组成的特殊字符,但在网上找不到解决方案!
例如,我想对字符串"வாழைப்பழம“进行计数。它实际上由6个泰米尔语字符组成,但在本例中是9个字符,当我们使用常规方法来计算长度时。我想知道泰米尔语是唯一一种会导致这个问题的编码,是否有解决这个问题的方法。我目前正在尝试在C#中寻找解决方案。
预先感谢=)
发布于 2012-06-16 01:05:03
使用StringInfo.LengthInTextElements
var text = "வாழைப்பழம";
Console.WriteLine(text.Length); // 9
Console.WriteLine(new StringInfo(text).LengthInTextElements); // 6可以在String.Length的文档中找到对此行为的解释
Length属性返回此实例中的Char对象数,而不是Unicode字符数。原因是一个Unicode字符可能由多个Char表示。使用
System.Globalization.StringInfo类处理每个Unicode字符,而不是每个Char。
发布于 2012-06-16 01:08:59
一个小挑剔:.NET中的string使用UTF-16,而不是UTF-8。
当你谈论字符串的长度时,你可能会有几种不同的意思:
除了it isn't.
这通常是人们说字符或字符串长度时的意思。
在您的例子中,您的困惑源于4.和3.3之间的差异。3.是C#使用的,4.是您所期望的。像泰米尔语这样的复杂脚本使用连字和变音符号。连字是将两个或多个相邻字符压缩成一个字形-在您的例子中,ழை是ழ和ை的连字-后者改变了前者的外观;வா也是这样的连字。变音符号是字母周围的装饰物,例如à中的重音符号或ப்上的圆点。
我提到的两种情况都会产生单个字形(您认为是单个字符),但它们都需要两个实际的字符。因此,您最终在字符串中多了三个代码点。
需要注意的一件事:对于您的情况,2.和3.之间的区别是无关紧要的,但通常您应该记住这一点。
https://stackoverflow.com/questions/11055122
复制相似问题