日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qt先生成json文件后程序启动时读取json文件在一组数据模拟下正常,换一组数据就出现乱码

發布時間:2024/9/27 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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文件的模式,可以正常運行。

亂碼是由于編碼格式,文件疊加是因為沒有在新建時將上一次的文件內容清空。

  • 編碼
  • void 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()));array.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);in<<strJson;file.close(); }

    先構建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文件時將文件的打開模式改為以下就可實現文件不存在創建,文件存在則清空文件內容。
  • 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);in<<strJson;file.close();

    提示:
    關于編碼格式這塊兒,作者表示不是很清楚,所以上面描述出錯的地方還望更改。問題描述和現象有些亂,問題已解決,由于不是自己的demo涉及到公司,就沒全部貼,詳情涉及太多。僅以記錄。

    總結

    以上是生活随笔為你收集整理的qt先生成json文件后程序启动时读取json文件在一组数据模拟下正常,换一组数据就出现乱码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。