我正在寻找一种方法来计算由多个角色组成的特殊角色但在网上找不到解决方案!
例如我想数字串“வாழைப்பழம”。它实际上由6个泰米尔字符组成,但在这种情况下,当我们使用常规方法查找长度时,它的9个字符。我想知道泰米尔是唯一会导致此问题的编码,如果有解决方案的话。我目前正在尝试在C#中找到解决方案。
提前谢谢=)
答案 0 :(得分:10)
使用StringInfo.LengthInTextElements
:
var text = "வாழைப்பழம";
Console.WriteLine(text.Length); // 9
Console.WriteLine(new StringInfo(text).LengthInTextElements); // 6
有关此行为的说明,请参阅String.Length的文档:
长度属性返回此实例中的Char对象数,而不是Unicode字符数。原因是Unicode字符可能由多个Char表示。使用
System.Globalization.StringInfo
类来处理每个Unicode字符而不是每个Char。
答案 1 :(得分:3)
.NET中的一个小挑剔:string
使用UTF-16,而不是UTF-8
当你谈论字符串的长度时,你可能会指出几种不同的东西:
在你的情况下,你的困惑源于4和3之间的差异.3。是C#使用的,4。是你所期望的。泰米尔语等复杂脚本使用连字和变音符号。连字是两个或多个相邻字符收缩成单个字形 - 在你的情况下ழை是ழ和lig的连字 - 后者改变了前者的外观; வா也是这样的结扎。变音符号是字母周围的饰物,例如在à或者上面的点上的重音。
我提到的两个案例都会产生一个字形(你认为是单个字符),但它们都需要两个实际的字符。所以你最终在字符串中有三个代码点。
有一点需要注意:对于你的情况,2和3之间的区别是无关紧要的,但通常你应该记住它。