0

我想取消转义 unicode 字符串%uXXXX%uYYYY,所以我尝试了:

QString unescapeUnicode (const QString & src)
{
    return QString::fromUtf8 ( src.replace ("%", "\u").toAscii() );
}

由于\u不是标准转义序列,因此无法编译,

但是输出QString::fromUtf8 ("\uXXXX\uYYYY")效果很好,这里可能有什么问题?

4

1 回答 1

1

适用于文字字符串的转义不适用于字符串。您需要解析每个字符的 unicode 值并逐个字符地构建字符串。例如像这样:

QString unescapeUnicode(const QString& src)
{
    QStringList chars = src.split("%u", QString::SkipEmptyParts);
    QChar* qchars = new QChar[chars.size()];

    bool ok;
    for (int i = 0; i < chars.size(); ++i)
    {
        qchars[i] = QChar(chars[i].toInt(&ok, 16));
        if (!ok)
            return "ERROR";
    }

    QString result(qchars, chars.size());
    delete[] qchars;
    return result;
}

和用法:

QString txt = unescapeUnicode("%u00a2%u20ac%u3b2");
于 2012-10-12T20:23:09.860 回答