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 に答える