首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从QChar检索Unicode代码点> U+FFFF

从QChar检索Unicode代码点> U+FFFF
EN

Stack Overflow用户
提问于 2011-08-07 20:41:24
回答 3查看 2K关注 0票数 7

我有一个应用程序,它应该处理所有类型的字符,并在某种程度上显示有关它们的信息。我在QChar,QString等中使用Qt和它固有的Unicode支持。

现在我需要QChar的代码点来查找http://unicode.org/Public/UNIDATA/UnicodeData.txt中的一些数据,但是QChar的unicode()方法只返回一个ushort (unsigned short),它通常是一个从0到65535 (或0xFFFF)的数字。有一些码位大于0xFFFF的字符,那么如何获取这些字符呢?是我遗漏了什么技巧,还是Qt/QChar目前不支持这个?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-07 20:43:58

每个QChar都是一个UTF-16值,而不是一个完整的Unicode码点。因此,非BMP字符由两个QChar代理项对组成。

票数 7
EN

Stack Overflow用户

发布于 2017-04-22 00:47:06

该解决方案似乎包含有文档记录的代码,但在Web上并不多见。您可以获得十进制形式的utf-8值。然后,您可以申请以确定单个QChar是否足够大。在这种情况下,它不是。然后,您需要创建两个QChar。

代码语言:javascript
复制
uint32_t cp = 155222; // a 4-byte Japanese character 
QString str;
if(Qchar::requiresSurrogate(cp))
{
    QChar charArray[2];
    charArray[0] = QChar::highSurrogate(cp);
    charArray[1] = QChar::lowSurrogate(cp);
    str =  QString(charArray, 2);
}

生成的QString将包含正确的信息来显示补充的utf-8字符。

票数 3
EN

Stack Overflow用户

发布于 2014-04-04 18:28:24

Qt中超出U+FFFF的Unicode字符

U+FFFF之前,QChar本身只支持Unicode字符。

QString通过连接两个QChars (即使用UTF-16编码)来支持除UTF之外的Unicode字符。但是,如果您需要在U+FFFF之外处理字符,QString API对您帮助不大。例如,包含单个Unicode字符U+131F6的QString实例将返回大小为2而不是1。

早在2011年,我就已经开通了关于这个问题的QTBUG-18868,但在三年多之后(!)在讨论中,它最终以“超出范围”而被关闭,没有任何解决方案。

解决方案

但是,您可以下载并使用Qt错误报告中附带的these Unicode Qt string wrapper classes。在LGPL下获得许可。

此下载包含包装类QUtfStringQUtfCharQUtfRegExpQUtfStringList,它们补充了现有的Qt类,并允许您执行以下操作:

代码语言:javascript
复制
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文档。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6972883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档