2016-10-18 27 views
0

QNetworkAccessManager::postメソッドを使用してPOSTリクエストを送信したいのですが、私のJSONには±などの国際文字がいくつかあります。ユニコードのエスケープ文字列のバックスラッシュを置き換えます。

残念なことに私のWebAPIには、QByteArrayという形式の文字列をデコードする際にいくつかの問題があります。"\xC4\x99\xC4\x85"です。

curlで、私のAPIは、エスケープされた文字列とユニコードのエスケープ文字列:\u0119\u0105で正常に動作します。

私はthisを試してみましたが、私はunicodeに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); 
} 

私は2つのバックスラッシュで文字列を得た:私は1つのバックスラッシュではなくなしで2つのバックスラッシュを交換しようとした

s: "\\u0119\\u0105" 

成功:

qDebug() << "s: " << toUnicodeEscaped(s).replace("\\\\","\\"); 

どうすれば交換できますか?

答えて

0

"\xc4\x85\xc4\x99"は、QStringに変換するには、QString::fromUtf8を使用して、UTF-8としてエンコードされた"ąę"です。

標準では、JSONをUTF-8、UTF-16またはUTF-32としてエンコードする必要があるため、通常、どのエンコードが使用されたかについて混乱はありません。 Web APIが適切に実装されている場合、それらの文字をエスケープする必要はありません。

関連する問題