2010-11-16 114 views
3

我正在尝试编写一个从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中,但显然它正在搞乱某处。

我错过了什么?

回答

2

据我简短的介绍JsonCpp文档可以看出,该库提供了UTF-8编码的字符串。 要转换到将QString使用QString :: fromUTF8 为qDebug使用qPrintable

的QString :: fromStdString使用的QString :: fromAscii,见here

+0

我用根[ “数据”] [30] [“名称的文档“] .asString(),但是这返回一个std :: string。 QString :: fromUtf8需要一个char数组,所以我做了QString :: fromUtf8(root [“data”] [30] [“name”]。asString()。data(),不幸的是,这留下了unicode字符为“?? “ – 2010-11-16 11:55:54

+0

我认为你应该使用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

+0

。 – hmuelner 2010-11-16 17:08:31