在 Qt 中显示 UTF-16 笑脸

Show UTF-16 smileys in Qt

请帮我显示 UTF-16 表情符号张开嘴巴的笑脸”来自字符串“\uD83D\uDE03” " 在 Qt 中(可能使用 qDebug()QLabel 来显示它)。

我有:

QString a = "\uD83D\uDE03";

我想将它打印到我的 qDebug 中,我期望的结果是 。我不知道该怎么做。

看到评论后(我已将其移至问题):

I have QString a = "\uD83D\uDE03"; I want to print it into my qDebug, and the result I expected is . I don't know how to do this.

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

当你有这种文字“\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 * 方法的原因)。