2012-04-23 60 views
4

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

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

+1

安转向这个问题:http://stackoverflow.com/q/3744721/1352254包括JavaScript使用UCS-2而不是UTF-16的有用信息,并指出这是不可能的。 – Angus 2012-04-24 14:54:52

+0

这将是可能的,它不会很容易,因为你必须处理一些低级的Unicode问题。 – hippietrail 2014-01-28 05:11:35

回答

1

对于组合字符,请看Derived Combining Class,其中列出了所有组合字符(等等)。既然你只是对计算感兴趣,你可以将它们排除 - 让你略微接近估计。

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

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

+0

感谢您的信息,当时我没有注意到链接的问题有示例代码,我仔细研究过它,并认为JS无法处理将需要的低级别字符串内容。 – Angus 2012-09-06 21:19:54

4

这是一个纯粹的JavaScript库,做到了这一点:

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

它在所有边缘情况下实现Unicode UAX-29标准,您可能会在家庭冲突解决方案中错过,例如非拉丁语变音符号,韩文朝鲜字符,表情符号,多个组合标记等。