J'essaye d'écrire une application C++ Qt 4.7 qui obtient du JSON à partir d'une API web. J'ai fait quelques lectures et JsonCpp semble être le meilleur. Je l'ai donc construit juste trouvé et ajouté à mon projet très bien.Utilisation de JsonCpp et Qt Together (Problèmes avec Unicode)
void RetrievingInformationPage::replyFinished(QNetworkReply *reply)
{
Json::Value root;
Json::Reader reader;
bool success = reader.parse(reply->readAll().data(), root);
// here be issues
qDebug() << QString::fromStdString(root["data"][30]["name"].toStyledString());
return;
}
Quand je lance ce code, il affiche le nom que je teste (il est un nom avec unicode), mais la sortie des caractères spéciaux comme complet charabia ("å¤? À ¥ लि ¤ "à ¤ ड"). L'Unicode est entré comme une chaîne JSON "\ u00a09 \ u00a09 \ u00a09 \ u00a09 \ u00a09 \ u00a09 \ u003d", alors je suppose que JsonCpp le convertit en les caractères unicode r \ u00e9els. J'espérais que QString :: fromStdString prendrait unicode dans une chaîne std :: et le stockerait dans une chaîne QString, mais de toute évidence, il est en train de faire des bêtises quelque part.
Qu'est-ce qui me manque?
je racine [ "data"] [30] [ "nom "] .asString(), mais cela retourne une chaîne std :: string. QString :: fromUtf8 nécessite un tableau char donc j'ai fait QString :: fromUtf8 (root ["data"] [30] ["nom"]. AsString(). Data(). Malheureusement, cela a laissé les caractères Unicode comme "?? ?????? " –
Je pense que vous devriez utiliser c_str(), car data() ne met pas fin à la chaîne, mais QString :: fromUtf8() s'attend à ce que ce soit le cas. vérifiez si votre chaîne std :: string contient réellement Utf8 –
Vous devez utiliser QString :: fromUtf8 (xxx.c_str()) ou QString :: fromUtf8 (xxx.data(), xxx.size()) – hmuelner