BreakIterator ICU - 获取字素簇的字节长度

BreakIterator ICU - Get byte length of grapheme cluster

当使用来自ICU 的BreakIterator 时,有没有办法检索输入字符串中第n 个边界处的字素簇的字节长度(或代码单元长度)?理想情况下,调用次数最少 API。

自己回答:

如果您知道当前的代码单元索引,则可以使用 ICU::ubrk_current() 来 return 最近由 ICU::ubrk_next 编辑的 cude 单元索引=]()。 参见:http://icu-project.org/apiref/icu4c/ubrk_8h.html#a4f8b67527c5c9d9205a3446506ffeefc

我最困惑的是 UBreakIterator 方法描述中的歧义。但是,在联系 ICU 支持后,"Character Index" 相当于这种情况下的代码单元索引。

有了这些信息,简单的实现如下:

(ubrk_current(m_breakIterator) - currentIndexInCodeUnits) * INTERNAL_ENCODING_BYTE_LENGTH;