2010-11-16 16 views
3

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?

Répondre

2

Pour autant que je sache, la bibliothèque JsonCpp fournit des chaînes en codage UTF-8. Pour convertir QString utiliser QString :: fromUtf8 pour qDebug utiliser qPrintable

QString :: fromStdString utilise QString :: fromAscii, consultez la documentation here

+0

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 "?? ?????? " –

+0

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 –

+0

Vous devez utiliser QString :: fromUtf8 (xxx.c_str()) ou QString :: fromUtf8 (xxx.data(), xxx.size()) – hmuelner