我正在尝试编写一个从Web API获取一些JSON的C++ Qt 4.7应用程序。我做了一些阅读,JsonCpp似乎是最好的。所以我建立它只是找到并添加到我的项目就好了。一起使用JsonCpp和Qt(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;
}
当我运行这段代码,它输出我测试的名称(这是与它的Unicode名),但特殊字符输出完整的胡言乱语(“澶?à¥à¤²à¤¿ 夫澶°A¥à¤¡“)。 unicode以JSON字符串“\ u0915 \ u094d \ u0932 \ u093f \ u092b \ u0930 \ u094d \ u0921”的形式进入,然后我假设JsonCpp将它转换为实际的Unicode字符。我希望QString :: fromStdString将一个std :: string中的unicode存储在一个QString中,但显然它正在搞乱某处。
我错过了什么?
我用根[ “数据”] [30] [“名称的文档“] .asString(),但是这返回一个std :: string。 QString :: fromUtf8需要一个char数组,所以我做了QString :: fromUtf8(root [“data”] [30] [“name”]。asString()。data(),不幸的是,这留下了unicode字符为“?? “ – 2010-11-16 11:55:54
我认为你应该使用c_str(),因为data()不会null - 终止字符串,但QString :: fromUtf8()会期望它是。如果这不起作用,你应该使用QString :: fromUtf8(xxx.c_str())或者QString :: fromUtf8(xxx.data(),xxx.size())来检查你的std :: string是否包含Utf8 – 2010-11-16 14:45:54
。 – hmuelner 2010-11-16 17:08:31