首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统计特殊的UTF-8字符

统计特殊的UTF-8字符
EN

Stack Overflow用户
提问于 2012-06-16 00:59:21
回答 2查看 1.9K关注 0票数 7

我正在寻找一种方法来计算由多个字符组成的特殊字符,但在网上找不到解决方案!

例如,我想对字符串"வாழைப்பழம“进行计数。它实际上由6个泰米尔语字符组成,但在本例中是9个字符,当我们使用常规方法来计算长度时。我想知道泰米尔语是唯一一种会导致这个问题的编码,是否有解决这个问题的方法。我目前正在尝试在C#中寻找解决方案。

预先感谢=)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-16 01:05:03

使用StringInfo.LengthInTextElements

代码语言:javascript
复制
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。

票数 11
EN

Stack Overflow用户

发布于 2012-06-16 01:08:59

一个小挑剔:.NET中的string使用UTF-16,而不是UTF-8。

当你谈论字符串的长度时,你可能会有几种不同的意思:

除了it isn't.

  • Length in UTF-8/UTF-16 code 这是最常见的解释,它让你更接近现代,应该是处理字符串长度的方式,除了it isn‘t.

  • Length in UTF-8/UTF-16 这是最常见的解释。从1派生。在这些编码中,某些字符需要不止一个代码单元,如果你不希望看到可见的“字符”(字形),事情就会变得复杂。

这通常是人们说字符或字符串长度时的意思。

在您的例子中,您的困惑源于4.和3.3之间的差异。3.是C#使用的,4.是您所期望的。像泰米尔语这样的复杂脚本使用连字和变音符号。连字是将两个或多个相邻字符压缩成一个字形-在您的例子中,ழை是ழ和ை的连字-后者改变了前者的外观;வா也是这样的连字。变音符号是字母周围的装饰物,例如à中的重音符号或ப்上的圆点。

我提到的两种情况都会产生单个字形(您认为是单个字符),但它们都需要两个实际的字符。因此,您最终在字符串中多了三个代码点。

需要注意的一件事:对于您的情况,2.和3.之间的区别是无关紧要的,但通常您应该记住这一点。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11055122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档