8

我试图在用户可见的字素中获取 javascript 字符串的长度,即忽略组合字符(和代理对?)。这是可能的,如果是这样,我将如何去做?

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

4

3 回答 3

6

这是一个纯粹的 JavaScript 库,它可以做到这一点:

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

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

于 2015-07-05T12:31:11.407 回答
1

对于组合字符,请查看列出所有组合字符(以及其他字符)的派生组合类。由于您只是对计数感兴趣,因此您可以将它们排除在外 - 让您得到更接近的估计。

在 Angus 链接的帖子中,BMP 之外的 JavaScript 字符串显示了处理代理的代码。但代码实际上与您想要的相反——它将 0x10000+ 代码点分成两个代码点。就 JS 而言,它是一个代码点——尽管是一个截断的代码点。谁在乎?您在数它们,而不是显示...

但是,您可能还想处理另一类代码点,即不可打印字符。当然,任何低于 0x20 的东西,但还有很多其他的——例如,看看 0x2000 范围。这些也不可见,不应计入您的计数中。

于 2012-05-19T17:37:48.063 回答
0

这个开源的 CoffeeScript 实现似乎工作得很好:https ://github.com/devongovett/grapheme-breaker (如果不是 CS 的话)

于 2015-01-02T06:17:20.990 回答