2016-10-18 9 views
0

QNetworkAccessManager::post 메서드를 사용하여 POST 요청을 보내려고하지만 내 JSON에는 ±과 같은 일부 국제 문자가 있습니다.유니 코드 이스케이프 문자열에서 백 슬래시 바꾸기

불행히도 내 WebAPI는이 문자열을 QByteArray 형식으로 디코딩하는 데 약간의 문제가 있습니다 : "\xC4\x99\xC4\x85".

curl으로 내 API는 이스케이프 문자열 및 유니 코드 이스케이프 문자열 (\u0119\u0105)과 함께 잘 작동합니다.

나는 this 시도하지만 유니 코드로 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("\\\\","\\"); 

어떻게 대체 할 수 있습니까?

답변

0

"\xc4\x85\xc4\x99"QString으로 변환하려면 UTF-8로 인코딩 된 "ąę"이고 QString::fromUtf8을 사용하십시오.

표준은 JSON이 UTF-8, UTF-16 또는 UTF-32로 인코딩되어야하므로 일반적으로 어떤 인코딩이 사용되었는지 혼란스럽지 않습니다. 웹 API가 제대로 구현되면 해당 문자를 이스케이프하지 않아도됩니다.