提要

生成的json文件在程序加载解析时出现上述错误,究其原因是生成json文件过程中编码问题。qt编译器默认的编码格式为utf-8,而windows一般为gbk编码,所以就需要在生成本地json文件的时候将utf-8编码转换为gbk编码。读取json文件的时候,将gbk编码转换为utf-8编码。

示例

json文件格式

{"btnInfo": [{"id": 10008,"index": 1,"name": "场景8"}, {"id": 10026,"index": 2,"name": "场景K-P蝴蝶飞"}, {"id": 10014,"index": 3,"name": "场景即"}, {"id": 10021,"index": 6,"name": "场景及对QP"}, {"id": 10021,"index": 7,"name": "场景及对QP"}]
}

生成json文件为本地编码。

void SystemScenenForm::createJsonFile()
{QJsonObject data;QJsonObject subData1;QJsonArray array;int index;QMap<int,stuSceNameId>::iterator it;for(it = m_btnInfoMap.begin(); it != m_btnInfoMap.end(); ++it){index = it.key();stuSceNameId temp = *it;subData1.insert("index",index);subData1.insert("id",temp.id);subData1.insert("name",QString::fromLocal8Bit(temp.name.toLocal8Bit()));//将utf-8转换为gbkarray.append(subData1);}data.insert("btnInfo",array);QJsonDocument document;document.setObject(data);QByteArray jsonArray = document.toJson(QJsonDocument::Compact);QString strJson(jsonArray);QString strName = QCoreApplication::applicationDirPath() + "/sceneBtnInfo.json";QFile file(strName);if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){QString strTitle = "提示";QString strContent = QString("%1文件打开失败!").arg(strName);QMessageBox::information(this,strTitle,strContent);return ;}QTextStream in(&file);//生成的json文件中编码为gbkin<<strJson;file.close();
}

读取json文件时将本地编码进行转换为gbk编码。

QString SystemScenenForm::readSceneBtnInfo(QString fileName)
{QByteArray allData;
#ifdef OUT_PUToutPut<<"文件路径及名称:"<<fileName;
#endifQTextCodec *code = QTextCodec::codecForName("GBK");QFile file(fileName);if (!file.open(QIODevice::ReadOnly)){#ifdef OUT_PUToutPut<<QString("%1配置文件读取失败!").arg(fileName);
#endifreturn allData;}allData = file.readAll();QString str = code->toUnicode(allData);//gbk编码的QByteArray类型变量转换为utf-8编码的QString变量file.close();
#ifdef OUT_PUT
//   outPut<<"json文件内容:"<<allData;
#endifreturn str;
}void SystemScenenForm::parseSceneBtnJson(QByteArray &byteArray)
{int tempIndex;stuSceNameId tempStu;if(m_btnInfoMap.size() != 0){m_btnInfoMap.clear();}QJsonObject jsonObject;QJsonParseError jsonError;QJsonDocument document = QJsonDocument::fromJson(byteArray,&jsonError);if(!document.isEmpty() && jsonError.error == QJsonParseError::NoError){QJsonObject resultObject = document.object();QJsonValue jsonValue = resultObject.value("btnInfo");if(jsonValue.isArray()){QJsonArray jsonArray = jsonValue.toArray();for(int i = 0; i < jsonArray.size(); ++i){jsonObject = jsonArray.at(i).toObject();tempIndex = jsonObject.value("index").toInt();tempStu.id = jsonObject.value("id").toInt();tempStu.name = jsonObject.value("name").toString();m_btnInfoMap.insert(tempIndex,tempStu);}}}else{outPut<<"sceneBtnInfo.json文件解析失败"<<jsonError.errorString();}
}//读取json文件时函数的调用,调用的为上面的函数
QString byteArray = readSceneBtnInfo(strName);
outPut<<"读到的字符串:"<<byteArray;
if(byteArray.size() == 0)
{return ;
}
QByteArray array = byteArray.toUtf8();//将utf-8编码的QString类型变量转换为utf-8的QByteArray类型变量
parseSceneBtnJson(array);

这样就解决了生成含有中文的json文件出现乱码的情况。

qt中生成含有中文的json文件和解析json文件相关推荐

  1. qt中生成含有中文的json文件,读取含有中文的json文件

    引言 之前将变量保存并在本地生成json文件,由于其中含有中文,导致生成的json文件出现乱码,或者就是生成的json文件没有乱码,但是读取生成的json文件时出现乱码,不能正常解析json. 示例 ...

  2. 【转】QT中使用MYSQL中文乱码解决方法

    [转]QT中使用MYSQL中文乱码解决方法 Linux下乱码解决办法: 1.在QT程序的main.cpp的main函数中添加红色字那三句: int main(int argc, char *argv[ ...

  3. (C++)将数据库文件导出XML文件以及解析XML文件生成数据库文件的处理方法

    将数据库文件导出XML文件以及解析XML文件生成数据库文件的处理方法 思路:将数据库所有要导出的信息通过sql语句得到,存储到结构体中,然后将结构体的内容通过自定义的xml格式导出. 此方法使用的是T ...

  4. 第六章、epub文件处理 -- 解析container文件与.opf文件

    2019独角兽企业重金招聘Python工程师标准>>> 第六章.epub文件处理 -- 解析container文件与.opf文件 这一章我们会接着第三章结尾介绍的FBReaderAp ...

  5. 如何反编译apk文件并解析.class文件查看Java源代码

    如何反编译apk文件并解析.class文件查看Java源代码 前期工作:先准备好反编译需要用到的工具:下载链接. 1.把下载好的工具解压,得到下面这三个文件 2.配置环境变量到path(apktool ...

  6. sql解析json格式字段、sql关联json格式字段,mysql解析json、sql解析json字符串

    sql解析json格式字段.sql关联json格式字段,mysql解析json.sql解析json字符串 sql解析字符串 sql关联json中的某个字段 sql解析字符串 表名user_login ...

  7. java解析json数据_java解析JSON数据详解

    JSON是目前最流行的轻量级数据交换语言(没有之一).尽管他是javaScript的一个子集.但由于其是独立与语言的文本格式,它几乎可以被所有编程语言所支持. 以下是对java语言中解析json数据的 ...

  8. Unity 中 创建 TextMeshPro 中文字体(含常见汉字 TXT 文件)

    TextMeshPro是个好东西,但是原生不支持中文,需要把中文字体转换为TextMeshPro才可以使用,即创建TextMeshPro中文字体,为TextMeshPro添加中文支持.(文章内含 常见 ...

  9. 解决Ubuntu18.04下Qt中无法输入中文的问题

    问题描述:我的中文输入法是搜狗的,但在qt中写代码时一直无法切换成中文,重启无效! 原因:安装的qt中缺少中文输入环境 解决办法: 进入到/usr/lib/x86_64-linux-gnu/qt5/p ...

最新文章

  1. 西安邮电大学计算机学院系主任,西安邮电大学计算机学院
  2. python 连接sqlite及操作
  3. python汇率编程_【菜鸟学Python】案例一:汇率换算
  4. python怎么变各种颜色_python – 如何淡化颜色
  5. java中飞飞检查异常_Springboot项目如何在controller层统一返回数据以及处理异常
  6. 枚举算法:概率计算。在标注编号分别为1,2,...,n的n张牌中抽取3张,试求抽出3张牌编号之和为素数的概率。输入整数n(3<n<=3000),输出对应的概率(四舍五入到小数点后第3位)。
  7. 请求过程中,需要证书认证,这种情况下如何处理
  8. 关于JS的面向对象总结
  9. java论文酒店管理系统_基于Java的酒店管理系统论文(含源文件).doc
  10. 【电源干货】你的电源模块选对了吗?7招教会你!
  11. miui11稳定版获取完整root_怎么获取root权限-MIUI11系统开启系统ROOT权限图文教程-支持小米红米全部机型...
  12. 系统分析和设计方法之用户界面设计
  13. JWT之token机制与双token详解
  14. 中国矿业大学计算机学院地址,中国矿业大学校区有几个 地址是什么
  15. 【表盘识别】基于matlab霍夫变换钟表表盘识别【含Matlab源码 1943期】
  16. 附源码|复杂网络社区发现——标签传播算法(LPA)
  17. Android-进阶教程-权限-安装时权限-签名权限-signature|privileged
  18. 流行的javascript库介绍
  19. Ubuntu linux系统qemu启动handset黑屏问题的解决方法
  20. 【04-25】力扣每日一题

热门文章

  1. 时序转化为图构建高效可解释的时序分析模型
  2. 让数据中台飞起来—— Quick BI性能优化解决方案及实践
  3. KDD 2019论文解读:异构信息网络上的对抗生成学习
  4. 利用Packer自定义镜像创建容器集群
  5. 2019阿里云开年Hi购季云通信分会场全攻略!
  6. 阿里下一代云分析型数据库AnalyticDB入选Forrester云化数仓象限
  7. 深入Spring Boot:利用Arthas排查NoSuchMethodError
  8. NSURLProtocol 拦截 NSURLSession 请求时body丢失问题解决方案探讨
  9. 阿里巴巴1682亿背后的“企业级”高效持续交付
  10. 崩管嵌入式还是单片机,盘就完事了