Заменить обратную косую черту из строки с экранированием 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 реализован правильно, вам не нужно экранировать эти символы.

Другие вопросы по тегам