在 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 *
方法的原因)。
请帮我显示 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 *
方法的原因)。