在Qt中显示UTF-16表情符号

时间:2016-07-13 03:19:11

标签: qt utf-16

请帮我用Qt中的字符串“\ uD83D \ uDE03”显示 UTF-16表情符号微笑脸孔”(也许请使用{{1或} qDebug()来显示它。)

我有:

QLabel

我想将它打印到我的QString a = "\\uD83D\\uDE03"; 中,我预期的结果是。我不知道该怎么做。

1 个答案:

答案 0 :(得分:4)

看到评论后(我已将其提出质疑):

  

我有QString a =" \ uD83D \ uDE03&#34 ;;我想将它打印到我的qDebug中,我期望的结果是。我不知道该怎么做。

我看到了什么问题。字符串编码和不同类型的字符串编码之间的转换。

当你有这种文字" \ uD83D \ uDE03" (保持它无效)你必须使用可以使用单字节作为字符的编码。 例如,UTF-8。然后你必须转换到内部使用UTF-16的QString

修复它(在Qt 5中):

QString smile = QString::fromUTF8("\xF0\x9F\x98\x83");

在Qt 4中,它有点复杂:

QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QString smile = QTextDecoder(codec).toUnicode("\xF0\x9F\x98\x83", 4);

另一种方法使用QChar,它是nicely documented(适用于Qt4和Qt5),这里是文档中的示例调整:

static const QChar unicodeSmile[] = { 0xD83D, 0xDE03, 0 };
QString smile = QString::fromRawData(unicodeSmile);

请注意,还有wchar,但这是非常依赖平台的,因此可能会产生更多问题(这就是Qt提供QChar *方法的原因。)