假设我有一个可能包含任何Unicode字符的QString,我想迭代它的字符或计算它们。而“字符”我指的是用户所感知的内容(大致等同于“字形”)而不仅仅是QChars(16位Unicode字符)。一些“实际”字符由几个QChars(代理对;基本字符+组合标记)构成。对于某些组合字符,我可能会将字符串规范化以创建复合字符,但这并不总是有帮助。
我是否忽略了将QString拆分为“实际”字符的内置函数?
或者如果我必须自己解析它,这是结构(在EBNF中)还是我遗漏了什么?
character = ((high_surrogate, low_surrogate) | base_character), {combining_mark}
(base_character
是每个QChar,不是代理或组合角色)
答案 0 :(得分:4)
经过更多的研究后,我找到了“实际角色”这个词, grapheme ,以及用于查找字形边界的Qt类: QTextBoundaryFinder 。
答案 1 :(得分:1)
我不确定组合标记,但对于代理对,我认为你可以使用QString::toUcs4(),它应该返回你的字符串的32位Unicode表示。