从unicode转义字符串替换反斜杠

时间:2016-10-18 21:33:44

标签: qt unicode utf-8 qnetworkaccessmanager qbytearray

我想使用QNetworkAccessManager::post方法发送POST请求,但我的JSON有一些国际字符,如ąę

不幸的是,我的WebAPI在从QByteArray格式解码此字符串时遇到了一些问题:"\xC4\x99\xC4\x85"

使用curl我的API可以正常使用未转义字符串和unicode转义字符串:\u0119\u0105

我尝试了this,但在我将QString转换为unicode转义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 个答案:

答案 0 :(得分:0)

"\xc4\x85\xc4\x99" "ąę"编码为UTF-8,要将其转换为QString,请使用QString::fromUtf8

该标准要求JSON编码为UTF-8,UTF-16或UTF-32,因此通常不会混淆使用的编码。如果您的网络API正确实施,您就不必逃避这些角色。