请帮我用Qt中的字符串“\ uD83D \ uDE03”显示 UTF-16表情符号“微笑脸孔”(也许请使用{{1或} qDebug()
来显示它。)
我有:
QLabel
我想将它打印到我的QString a = "\\uD83D\\uDE03";
中,我预期的结果是。我不知道该怎么做。
答案 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 *
方法的原因。)