取消转义unicode字符串,不能用'\ u'替换'%'

时间:2012-10-12 05:31:58

标签: qt4

我想解除像%uXXXX%uYYYY这样的unicode字符串,所以我尝试了:

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

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

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

1 个答案:

答案 0 :(得分: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");