我正在寻找一种方法来计算由多个角色组成的特殊角色,但在网上找不到解决方案!
例如,我想计算字符串"வாழைப்பழம".它实际上由6个泰米尔字符组成,但在这种情况下,当我们使用常规方法查找长度时,它的9个字符.我想知道泰米尔是唯一会导致此问题的编码,如果有解决方案的话.我目前正在尝试在C#中找到解决方案.
提前谢谢=)
Hei*_*nzi 11
用途StringInfo.LengthInTextElements:
var text = "?????????";
Console.WriteLine(text.Length); // 9
Console.WriteLine(new StringInfo(text).LengthInTextElements); // 6
Run Code Online (Sandbox Code Playgroud)
可以在String.Length的文档中找到此行为的说明:
该长度属性返回字符对象在这种情况下数量,而不是Unicode字符数.原因是Unicode字符可能由多个Char表示.使用
System.Globalization.StringInfo该类来处理每个Unicode字符而不是每个Char.
轻微的nitpick:string.NET中的s使用UTF-16,而不是UTF-8
当您谈论字符串的长度时,您可能会想到几件不同的事情:
在您的情况下,您的困惑源于4.和3之间的差异。3. C#所使用的是3. C#是您所期望的。泰米尔语等复杂文字使用连字和变音符号。连字是将两个或多个相邻字符压缩成一个字形的方式–在您的情况下?是连字吗?和?–后者改变了前者的外观;?? 连字也是如此。变音符号是字母周围的装饰品,例如à上的重音或??上的点。
我提到的两种情况都导致一个单一的字素(您将其视为单个字符),但是它们每个都需要两个实际字符。因此,您最终在字符串中多了三个代码点。
需要注意的一件事:对于您的情况,2和3之间的区别无关紧要,但通常应牢记这一点。