qt先生成json文件后程序启动时读取json文件在一组数据模拟下正常,换一组数据就出现乱码
生活随笔
收集整理的這篇文章主要介紹了
qt先生成json文件后程序启动时读取json文件在一组数据模拟下正常,换一组数据就出现乱码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
提要
程序編號后自己模擬的數據程序在生成和解析json時都正常,但是換了一組數據,生成的json文件中部分中文亂碼,且出現json文件的格式被混亂的現象。
效果
上述出現的不正確的json文件,如下:
{"btnInfo":[{"id":10005,"index":1,"name":"全屏馬賽兢},{"id":10007,"index":2,"name":"20210128-SY"},{"id":10010,"index":3,"name":"PPT匯報-2"},{"id":10013,"index":4,"name":"安播例會"},{"id":10022,"index":5,"name":"中星6B/S6視頻會議"}]}°媒體外罷},{"id":10061,"index":6,"name":"視頻會議20210309"}]}上述json文件的內容出現部分中問亂碼,且json文件的格式也不正常。似乎是兩個json文件疊加了。
問題
首先改json文件如下:
{ "jsonrpc": "2.0", "method": "source.getSceneList", "result": [ {"name": "樓宇1","id": "10001"}, {"name": "樓宇2","id": "10002"}, {"name": "樓宇3","id": "10003"}, {"name": "樓宇4","id": "10004"}, {"name": "樓宇5","id": "10005"}, {"name": "樓宇6","id": "10006"}, {"name": "樓宇7","id": "10007"}, {"name": "樓宇8","id": "10008"}, {"name": "樓宇9","id": "10009"}, {"name": "樓宇10","id": "10010"}, {"name": "樓宇11","id": "10011"}, {"name": "樓宇12","id": "10012"}, {"name": "樓宇巍峨","id": "10013"}, {"name": "樓宇即","id": "10014"}, {"name": "樓宇15","id": "10015"}, {"name": "樓宇16","id": "10016"}, {"name": "樓宇17","id": "10017"}, {"name": "樓宇18","id": "10018"}, {"name": "樓宇19","id": "10019"}, {"name": "樓宇20","id": "10020"}, {"name": "樓宇21","id": "10021"}, {"name": "樓宇時","id": "10019"}, {"name": "樓宇杜","id": "10020"}, {"name": "樓宇及對QP","id": "10021"}, {"name": "樓宇K-P蝴蝶飛","id": "10026"}], "id": 0 }通過點擊界面上的按鈕,按鈕的文本如上name字段所示,生成json文件,下次程序啟動的時候再將json文件中name字段按照上一次按鈕的文本設置到按鈕上。上述json文件生成后起初會出現中文為奇數時尾部中文亂碼,中文為偶數時不亂碼,后改變編碼和創建json文件的模式,可以正常運行。
亂碼是由于編碼格式,文件疊加是因為沒有在新建時將上一次的文件內容清空。
先構建json結構,然后創建json文件,由于第三個字段name存在中文,所以將其轉換為本地編碼。讀取json文件后再將其轉換為utf-8編碼.
QString byteArray = readSceneBtnInfo(strName);//從json文件中讀取的字符串outPut<<"讀到的字符串:"<<byteArray;if(byteArray.size() == 0){return ;}QByteArray array = byteArray.toUtf8();parseSceneBtnJson(array);讀取json文件的函數如下。
QString 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);file.close(); #ifdef OUT_PUT // outPut<<"json文件內容:"<<allData; #endifreturn str; }創建json文件時將文件的打開模式改為以下就可實現文件不存在創建,文件存在則清空文件內容。
提示:
關于編碼格式這塊兒,作者表示不是很清楚,所以上面描述出錯的地方還望更改。問題描述和現象有些亂,問題已解決,由于不是自己的demo涉及到公司,就沒全部貼,詳情涉及太多。僅以記錄。
總結
以上是生活随笔為你收集整理的qt先生成json文件后程序启动时读取json文件在一组数据模拟下正常,换一组数据就出现乱码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片夹_各种变调夹的优缺点、原理和使用方
- 下一篇: qt中调整弹出框的位置