在javascript字符串中获取字形字符数?

时间:2012-04-23 20:37:00

标签: javascript unicode grapheme

我试图在用户可见的字形中获取javascript字符串的长度,即忽略组合字符(和代理对?)。这是可能的吗?如果可以的话,我该怎么做呢?

我们在项目中使用了dojo工具包,但任何一般的JavaScript解决方案都会很棒。

3 个答案:

答案 0 :(得分:5)

这是一个纯JavaScript代码库:

https://github.com/orling/grapheme-splitter

它在家庭酿造解决方案中可能会错过的所有边缘情况下都实现了Unicode UAX-29标准,例如非拉丁语变音符号,韩语(韩语)jamo字符,表情符号,多个组合标记等等。

答案 1 :(得分:1)

对于组合字符,请查看列出所有组合字符({等等)的Derived Combining Class。由于你只是对计数感兴趣,你可以将它们核对出来 - 让你稍微接近估计。

在Angus链接的帖子中,JavaScript strings outside of the BMP显示了处理代理人的代码。但是代码实际上与你想要的相反 - 它将0x10000 +代码点分成两个代码点。就JS而言,它是一个代码点 - 尽管是截断的代码点。谁在乎?你在计算它们,而不是显示......

但是,您可能还想要处理另一类代码点,即不可打印的字符。当然,在0x20以下的任何东西,但还有很多其他的东西 - 例如,查看0x2000范围。这些都不可见,也不应包含在您的计数中。

答案 2 :(得分:0)

这个开源的CoffeeScript实现似乎运行得足够好https://github.com/devongovett/grapheme-breaker(如果只是它不是CS)