在QString中查找“实际”字符(字形)

时间:2011-11-04 14:58:39

标签: qt unicode utf-16

假设我有一个可能包含任何Unicode字符的QString,我想迭代它的字符或计算它们。而“字符”我指的是用户所感知的内容(大致等同于“字形”)而不仅仅是QChars(16位Unicode字符)。一些“实际”字符由几个QChars(代理对;基本字符+组合标记)构成。对于某些组合字符,我可能会将字符串规范化以创建复合字符,但这并不总是有帮助。

我是否忽略了将QString拆分为“实际”字符的内置函数?

或者如果我必须自己解析它,这是结构(在EBNF中)还是我遗漏了什么?

character = ((high_surrogate, low_surrogate) | base_character), {combining_mark}

base_character是每个QChar,不是代理或组合角色)

2 个答案:

答案 0 :(得分:4)

经过更多的研究后,我找到了“实际角色”这个词, grapheme ,以及用于查找字形边界的Qt类: QTextBoundaryFinder

答案 1 :(得分:1)

我不确定组合标记,但对于代理对,我认为你可以使用QString::toUcs4(),它应该返回你的字符串的32位Unicode表示。