当使用ICU的BreakIterator时,有没有办法在输入字符串的第n个边界检索字形簇的字节长度(或代码单元长度)?理想情况下,API调用次数最少。
答案 0 :(得分:0)
自答:
如果以代码单位知道当前索引,则可以使用ICU :: ubrk_current()返回ICU :: ubrk_next()最近返回的cude单位索引。 请参阅:http://icu-project.org/apiref/icu4c/ubrk_8h.html#a4f8b67527c5c9d9205a3446506ffeefc
我对UBreakIterator方法描述中的含糊不清感到困惑。但是,在联系ICU支持后,"字符索引"在这种情况下,它等同于代码单元索引。
有了这些信息,一个简单的实现如下:
(ubrk_current(m_breakIterator) - currentIndexInCodeUnits) * INTERNAL_ENCODING_BYTE_LENGTH;