我想使用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("\\\\","\\");
如何更换它们?
答案 0 :(得分:0)
"\xc4\x85\xc4\x99"
"ąę"
编码为UTF-8,要将其转换为QString
,请使用QString::fromUtf8
。
该标准要求JSON编码为UTF-8,UTF-16或UTF-32,因此通常不会混淆使用的编码。如果您的网络API正确实施,您就不必逃避这些角色。