【求助】QJSONVALUE中文如何解析

博为王剑 2016-06-12 01:53:00
用QT5编码,接收 平台传过来的消息是JSON,解析后如下
{"fileName":"文件中文名"}
其中文件中文名是用 unicode编码

我用下面代码,把文件名(中文)读取出来到QString中 ,结果用了几种转换方式打印出来的都是????
QString filename;
name_value = obj_value.take("fileName");
if (name_value.isString())
{
QByteArray ba = name_value.toString().toLatin1();
filename = QString::fromLocal8Bit(ba); // 打印出来 ?????
filename = QString::fromLatin1(ba); // 打印出来 ?????
filename = QString::fromUtf8(ba); // 打印出来 ?????
}

请大家指导一下,看有什么方法可以解析?
...全文
1202 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35524906 2017-07-14
  • 打赏
  • 举报
回复
那如何将中文组到qjson里呢 求解啊
帝国2020 2016-08-29
  • 打赏
  • 举报
回复
引用 8 楼 allen_00 的回复:
QByteArray ba = name_value.toString().toUTF8()
正解!
allen_00 2016-06-14
  • 打赏
  • 举报
回复
QByteArray ba = name_value.toString().toUTF8()
冷静忍耐 2016-06-12
  • 打赏
  • 举报
回复
引用 5 楼 qq_33736500 的回复:
解析到content层次,才是需要的消息: {"record":"copy", "fileName","我爱中国"} record字段的值是,英文字符copy,所以可以正常解析; fileName字段的值是 中文字符我爱中国,解析出来为空,转码后就变问号
unicode直接解析到QString里,应该就是中文,不会乱码的啊。 这个试一下QStringLiteral()?? 我的json里面也有中文,不需要转换就是好的。
博为王剑 2016-06-12
  • 打赏
  • 举报
回复
应该还是编码转换的方法问题, 5个中文字节 编码转换后是 5个问号,如果是程序问题的话,那就应该不是这种现象
博为王剑 2016-06-12
  • 打赏
  • 举报
回复
解析到content层次,才是需要的消息: {"record":"copy", "fileName","我爱中国"} record字段的值是,英文字符copy,所以可以正常解析; fileName字段的值是 中文字符我爱中国,解析出来为空,转码后就变问号
博为王剑 2016-06-12
  • 打赏
  • 举报
回复
引用 3 楼 u013466477 的回复:
[quote=引用 2 楼 qq_33736500 的回复:] name_value.toString() 转出来的是空..... 所以才尝试改编码识别看能否读出来
name_value.toString()是空的,那说明你没读出来吧,是不是代码错了?? 这样肯定怎么转都转不对的额[/quote] Step1. 我在收到消息的地方打印str_info,消息内容是OK的 void __stdcall Recmessage_callback(const wchar_t* json_str) { str_info = QString::fromStdWString(json_str); } 打印str_info的内容如下: {"count":0,"m_ClazzName":"RC:TxtMsg","m_ConversationType":1,"m_Direction":true,"m_Message":"{\"content\":\"{\\\"record\\\":\\\"copy\\\",\\\"fileName\\\":"我爱中国"}\"}","m_MessageId":95,"m_MessageType":0,"m_RcvTime":"2016-06-12 12:14:49","m_ReadStatus":0,"m_SendStatus":30,"m_SendTime":"2016-06-12 12:14:50","m_SenderId":"10000","m_TargetId":"10000","result":"success"}
冷静忍耐 2016-06-12
  • 打赏
  • 举报
回复
引用 2 楼 qq_33736500 的回复:
name_value.toString() 转出来的是空..... 所以才尝试改编码识别看能否读出来
name_value.toString()是空的,那说明你没读出来吧,是不是代码错了?? 这样肯定怎么转都转不对的额
博为王剑 2016-06-12
  • 打赏
  • 举报
回复
name_value.toString() 转出来的是空..... 所以才尝试改编码识别看能否读出来
Z_墨脱 2016-06-12
  • 打赏
  • 举报
回复
name_value.toString() 这个你转化成QString了 为什么又转换成QByteArray 在转成QString呢????

16,175

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧