Qt中U+FFFF以外的Unicode字符
QChar
本身只支持最多U+FFFF
.
QString
U+FFFF
通过连接两个 QChars(即,通过使用 UTF-16 编码)支持 Unicode 字符。但是,如果您需要处理超出U+FFFF
. 例如,包含单个 Unicode 字符的 QString 实例U+131F6
将返回大小为 2,而不是 1。
我在 2011 年就这个问题打开了 QTBUG-18868,但经过三年多(!)的讨论,它最终因为“超出范围”而被关闭,没有任何解决方案。
解决方案
但是,您可以下载并使用这些已附加到 Qt 错误报告的Unicode Qt 字符串包装类。在 LGPL 下获得许可。
此下载包含包装类QUtfString
, QUtfChar
,它们补充了现有的 Qt 类并允许您执行以下操作QUtfRegExp
:QUtfStringList
QUtfString str;
str.append(0x1307C); // Some Unicode character beyond U+FFFF
Q_ASSERT(str.size() == 1);
Q_ASSERT(str[0] == 0x1307C);
str += 'a';
Q_ASSERT(str.size() == 2);
Q_ASSERT(str[1] == 'a');
Q_ASSERT(str.indexOf('a') == 1);
有关实现、使用和运行时复杂性的更多详细信息,请参阅下载中包含的 API 文档。