请帮助我在 Qt 中显示来自字符串“\uD83D\uDE03”的UTF-16 表情符号“张开嘴的微笑的脸qDebug()”(也许使用或来QLabel显示它)。
我有:
QString a = "\\uD83D\\uDE03";
Run Code Online (Sandbox Code Playgroud)
我想将其打印到 my 中qDebug,我期望的结果是 . 我不知道该怎么做。
看到评论后(我已将其移至问题):
我有 QString a = "\uD83D\uDE03"; 我想将其打印到我的 qDebug 中,我期望的结果是 。我不知道该怎么做。
我明白问题出在哪里了。字符串编码以及不同类型字符串编码之间的转换。
当你有这种文字“\uD83D\uDE03”(让它无效)时,你必须使用可以使用单字节作为字符的编码。例如 UTF-8。然后你必须进行QString内部使用 UTF-16 的转换。
修复它(在 Qt 5 中):
QString smile = QString::fromUtf8("\xF0\x9F\x98\x83");
Run Code Online (Sandbox Code Playgroud)
在 Qt 4 中,情况稍微复杂一些:
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QString smile = QTextDecoder(codec).toUnicode("\xF0\x9F\x98\x83", 4);
Run Code Online (Sandbox Code Playgroud)
另一种方法使用QChar并且它有很好的文档记录(适用于 Qt4 和 Qt5),这里是文档中示例的调整:
static const QChar unicodeSmile[] = { 0xD83D, 0xDE03, 0 };
QString smile = QString::fromRawData(unicodeSmile);
Run Code Online (Sandbox Code Playgroud)
请注意,也有wchar,但这非常依赖于平台,因此可能会产生更多问题(这就是 Qt 提供QChar *方法的原因)。