【问题标题】:Show UTF-16 smileys in Qt在 Qt 中显示 UTF-16 笑脸
【发布时间】:2016-07-13 03:19:11
【问题描述】:

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

我有:

QString a = "\\uD83D\\uDE03";

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

【问题讨论】:

  • 您能出示您的代码吗?你试过什么?
  • 我有QString a = "\\uD83D\\uDE03"; 我想将它打印到我的qDebug 中,我期望的结果是????。我不知道该怎么做。

标签: qt utf-16


【解决方案1】:

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

我有 QString a = "\uD83D\uDE03";我想将它打印到我的 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 * 方法的原因)。

【讨论】:

    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 2013-10-10
    • 2016-08-06
    • 2015-12-31
    • 1970-01-01
    • 2012-09-23
    • 2016-10-16
    • 1970-01-01
    相关资源
    最近更新 更多