我想取消转义 unicode 字符串%uXXXX%uYYYY
,所以我尝试了:
QString unescapeUnicode (const QString & src)
{
return QString::fromUtf8 ( src.replace ("%", "\u").toAscii() );
}
由于\u
不是标准转义序列,因此无法编译,
但是输出QString::fromUtf8 ("\uXXXX\uYYYY")
效果很好,这里可能有什么问题?
我想取消转义 unicode 字符串%uXXXX%uYYYY
,所以我尝试了:
QString unescapeUnicode (const QString & src)
{
return QString::fromUtf8 ( src.replace ("%", "\u").toAscii() );
}
由于\u
不是标准转义序列,因此无法编译,
但是输出QString::fromUtf8 ("\uXXXX\uYYYY")
效果很好,这里可能有什么问题?
适用于文字字符串的转义不适用于字符串。您需要解析每个字符的 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");