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