Заменить обратную косую черту из строки с экранированием Unicode
Я хочу отправить запрос POST, используя QNetworkAccessManager::post
метод, однако мой JSON имеет несколько международных символов, таких как ąę.
К сожалению, у моего WebAPI есть некоторые проблемы с декодированием этой строки из QByteArray
формат: "\xC4\x99\xC4\x85"
,
С curl
мой API работает нормально с неэкранированной строкой и с экранированной Unicode строкой: \u0119\u0105
,
Я попробовал это, но после преобразования QString
чтобы Юникод сбежал QString
:
QString toUnicodeEscaped(const QString& str){
QString escaped;
escaped.reserve(6 * str.size());
for (QString::const_iterator it = str.begin(); it != str.end(); ++it) {
QChar ch = *it;
ushort code = ch.unicode();
if (code < 0x80) {
escaped += ch;
} else {
escaped += "\\u";
escaped += QString::number(code, 16).rightJustified(4, '0');
}
}
return escaped;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString s = "ęą";
qDebug() << "s: " << toUnicodeEscaped(s);
}
Я получил строку с двумя обратными слешами:
s: "\\u0119\\u0105"
Я попытался заменить две обратные косые черты одной обратной косой чертой, но безуспешно:
qDebug() << "s: " << toUnicodeEscaped(s).replace("\\\\","\\");
Как я могу заменить их?
1 ответ
"\xc4\x85\xc4\x99"
является "ąę"
закодированный как UTF-8, чтобы преобразовать это в QString
использовать QString::fromUtf8
,
Стандарт требует, чтобы JSON кодировался как UTF-8, UTF-16 или UTF-32, поэтому обычно не возникает путаницы относительно того, какое кодирование использовалось. Если ваш веб-API реализован правильно, вам не нужно экранировать эти символы.