最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt數(shù)據(jù)庫應用之實現(xiàn)文件編碼格式識別

 更新時間:2022年06月10日 08:56:28   作者:feiyangqingyun  
在做數(shù)據(jù)導入導出的過程中,如果應用場景多了,相信各位都會遇到一個問題就是文件編碼的問題。本文將用Qt實現(xiàn)文件編碼格式識別,感興趣的可以了解一下

一、前言

在做數(shù)據(jù)導入導出的過程中,如果應用場景多了,相信各位都會遇到一個問題就是文件編碼的問題,有些文件是ANSI編碼,有些是utf8編碼,有些又是utf8帶bom編碼,不同的文件編碼如果都用同一種編碼格式去解析讀取出來的數(shù)據(jù)的話,肯定會遇到亂碼的問題,這并不是Qt的問題,也不是什么Qt亂碼的問題,而是要識別到文件的編碼然后用對應的編碼去讀取內(nèi)容,這樣就不會出現(xiàn)亂碼,當然亂碼的出現(xiàn)肯定是中文,如果文件全部是英文數(shù)字,無論何種編碼,都不會亂碼。

那么問題來了,如何用程序自動識別文件的編碼格式呢?找遍了搜索沒有找到完整的答案。查閱資料得知utf8帶bom編碼都會有個固定的頭部字節(jié)EFBBBF,所以這個好區(qū)分,由于ANSI編碼和utf8編碼沒有對應的頭部字節(jié)標識,所以需要轉(zhuǎn)個彎來處理,依然是讀取頭部的三個字節(jié),用QTextCodec的toUnicode函數(shù)轉(zhuǎn)換,轉(zhuǎn)換結(jié)果的ConverterState可以識別到可用字符數(shù)量,如果數(shù)量大于0說明是ANSI編碼,需要用gbk去解碼。

二、功能特點

  • 組件同時集成了導出數(shù)據(jù)到csv、xls、pdf和打印數(shù)據(jù)。
  • 所有操作全部提供靜態(tài)方法無需new,數(shù)據(jù)和屬性等各種參數(shù)設置采用結(jié)構(gòu)體數(shù)據(jù),極為方便。
  • 同時支持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等數(shù)據(jù)源。
  • 提供靜態(tài)方法直接傳入QTableView、QTableWidget控件,自動識別列名、列寬和數(shù)據(jù)內(nèi)容。
  • 每組功能都提供單獨的完整的示例,注釋詳細,非常適合各階段Qter程序員。
  • 原創(chuàng)導出數(shù)據(jù)機制,不依賴任何office組件或者操作系統(tǒng)等第三方庫,支持嵌入式linux。
  • 速度超快,9個字段10萬行數(shù)據(jù)只需要2秒鐘完成。
  • 只需要四個步驟即可開始急速導出海量數(shù)據(jù)比如100W條記錄到Excel。
  • 同時提供直接寫入數(shù)據(jù)接口和多線程寫入數(shù)據(jù)接口,不卡主界面。
  • 可設置標題、副標題、表名。
  • 可設置導出數(shù)據(jù)的字段名、列名、列寬。
  • 可設置末尾列自動拉伸填充,默認拉伸更美觀。
  • 可設置是否啟用校驗過濾數(shù)據(jù),啟用后符合規(guī)則的數(shù)據(jù)特殊顏色顯示。
  • 可指定校驗的列、校驗規(guī)則、校驗值、校驗值數(shù)據(jù)類型。
  • 校驗規(guī)則支持 精確等于==、大于>、大于等于>=、小于<、小于等于<=、不等于!=、包含contains。
  • 校驗值數(shù)據(jù)類型支持 整型int、浮點型float、雙精度型double,默認文本字符串類型。
  • 可設置隨機背景顏色及需要隨機背景色的列集合。
  • 支持分組輸出數(shù)據(jù),比如按照設備分組輸出數(shù)據(jù),方便查看。
  • 可設置csv分隔符、行內(nèi)容分隔符、子內(nèi)容分隔符。
  • 可設置邊框?qū)挾?、自動填?shù)據(jù)類型,默認自動數(shù)據(jù)類型開啟。
  • 可設置是否開啟數(shù)據(jù)單元格樣式,默認不開啟,不開啟可以節(jié)約大概30%的文件體積。
  • 可設置橫向排版、紙張邊距等,比如導出到pdf以及打印數(shù)據(jù)。
  • 提供圖文混排導出數(shù)據(jù)到pdf以及打印示例,自動分頁,支持多圖。
  • 提供一個打印樣板中同時包括橫向縱向排版示例。
  • 提供靜態(tài)函數(shù)將控件截圖導出到pdf文件。
  • 提供靜態(tài)函數(shù)將圖片轉(zhuǎn)成pdf文件。
  • 提供靜態(tài)函數(shù)將csv文件轉(zhuǎn)成xls文件,支持列寬表名等參數(shù)設置。
  • 針對每列可分別設置字段對齊樣式、內(nèi)容對齊樣式,包括左對齊、居中對齊、右對齊。
  • 靈活性超高,可自由更改源碼設置對齊方式、文字顏色、背景顏色等。
  • 支持任意excel表格軟件,包括但不限于excel2003-2021、wps、openoffice等。
  • 純Qt編寫,支持任意Qt版本+任意編譯器+任意系統(tǒng)。

三、體驗地址

體驗地址:https://pan.baidu.com/s/1eeL5MTz0rifwtVLegRpkoQ  提取碼:erxm 文件名:bin_dataout.zip

國內(nèi)站點:https://gitee.com/feiyangqingyun

國際站點:https://github.com/feiyangqingyun

四、效果圖

五、相關(guān)代碼

//檢查文件編碼 0=ANSI 1=UTF-16LE 2=UTF-16BE 3=UTF-8 4=UTF-8BOM
int DataCsv::findCode(const QString &fileName, QString &flag)
{
    //假定默認編碼utf8
    int code = 3;
    flag = "UTF-8";

    QFile file(fileName);
    if (file.open(QIODevice::ReadOnly)) {
        //讀取3字節(jié)用于判斷
        QByteArray buffer = file.read(3);
        quint8 b1 = buffer.at(0);
        quint8 b2 = buffer.at(1);
        quint8 b3 = buffer.at(2);
        if (b1 == 0xFF && b2 == 0xFE) {
            code = 1;
            flag = "UTF-16LE";
        } else if (b1 == 0xFE && b2 == 0xFF) {
            code = 2;
            flag = "UTF-16BE";
        } else if (b1 == 0xEF && b2 == 0xBB && b3 == 0xBF) {
            code = 4;
            flag = "UTF-8BOM";
        } else {
            //嘗試用utf8轉(zhuǎn)換,如果可用字符數(shù)大于0,則表示是ansi編碼
            QTextCodec::ConverterState state;
            QTextCodec *codec = QTextCodec::codecForName("utf-8");
            codec->toUnicode(buffer.constData(), buffer.size(), &state);
            if (state.invalidChars > 0) {
                code = 0;
                flag = "ANSI";
            }
        }

        file.close();
    }

    return code;
}

以上就是Qt數(shù)據(jù)庫應用之實現(xiàn)文件編碼格式識別的詳細內(nèi)容,更多關(guān)于Qt文件編碼格式識別的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

栖霞市| 蒲江县| 龙口市| 建湖县| 泗阳县| 将乐县| 郧西县| 黔江区| 罗甸县| 巴中市| 湖北省| 永泰县| 正镶白旗| 北川| 铁岭县| 黔西县| 五河县| 柯坪县| 云霄县| 嘉峪关市| 西丰县| 斗六市| 团风县| 临猗县| 合川市| 张家口市| 同仁县| 安图县| 济源市| 囊谦县| 图们市| 揭东县| 明光市| 汉中市| 娄烦县| 北安市| 淮滨县| 黔西县| 黄陵县| 连南| 沙河市|