QJsonObject写入读出json文件中文乱码问题解决
生活随笔
收集整理的這篇文章主要介紹了
QJsonObject写入读出json文件中文乱码问题解决
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題的提出:
QJsonObject寫入讀出json文件中文亂碼。
復現步驟:
當json串很長時,我們一般采用流的形式寫入文本,否則會截斷導致寫入不全,如下為將一個很長的json字符串寫入qsModelFilePath文件保存。
QFile file(qsModelFilePath);if (!file.open(QIODevice::ReadWrite | QIODevice::Text)){qDebug() << "file error!";gpMessageHandler->addErrorMessage(STR("保存模型時出錯"));CMsgBox(STR("保存模型時出錯"), this).Exec();return;}QTextStream jsonStream(&file);//jsonStream.setCodec("UTF-8");//處理utf8中文jsonStream << strModelJson;file.close(); // 關閉file如下為將上述的qsModelFilePath文件中的json讀出來:
QFile jsonFile(qsJsonFilePath);jsonFile.open(QIODevice::ReadOnly);QString strModelJson;QTextStream jsonStream(&jsonFile);//jsonStream.setCodec("UTF-8");//處理utf8中文while (!jsonStream.atEnd()){QString qsLineText = jsonStream.readLine();strModelJson.append(qsLineText);}strModelJson = strModelJson.toLower();strModelJson = strModelJson.replace(',', ','); // 防止在配置文件中輸入中文逗號jsonFile.close();// 使用json文件對象加載字符串QJsonParseError error;// 使用靜態函數獲取 QJsonDocument 對象QJsonDocument jsonDocument = QJsonDocument::fromJson(strModelJson.toUtf8(), &error);// 判斷是否對象if (!jsonDocument.isObject() || ( error.error != QJsonParseError::NoError)){return QJsonObject();}QJsonObject docObject = jsonDocument.object();QString strAbsoluteDir = docObject[g_pszAbsoluteDir].toString();上述保存寫入json串到文件、從文件讀取json到QString必須都要加入下述代碼:
jsonStream.setCodec("UTF-8");//處理utf8中文即將上面的該句注釋取消才能保證讀取json到QString代碼段中提取json串中含有中文字段的信息不亂碼(如下例,strAbsoluteDir 中含有中文):
QString strAbsoluteDir = docObject[g_pszAbsoluteDir].toString();也就是說為了保證讀取出的信息中文不亂碼,必須在保存寫入json字符串到文件和從文件讀取json到QString兩端都加入如下代碼:
jsonStream.setCodec("UTF-8");//處理utf8中文兩端任何一端缺少該句,都會引起亂碼
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的QJsonObject写入读出json文件中文乱码问题解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巫师3新手加点顺序是什么
- 下一篇: 苹果今年出新机吗