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

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

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

一、前言

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

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

二、功能特點(diǎn)

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

三、體驗(yàn)地址

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

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

國際站點(diǎn):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)
{
    //假定默認(rèn)編碼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ù)庫應(yīng)用之實(shí)現(xiàn)文件編碼格式識(shí)別的詳細(xì)內(nèi)容,更多關(guān)于Qt文件編碼格式識(shí)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

富锦市| 舟曲县| 宁阳县| 诸城市| 莒南县| 广元市| 奈曼旗| 宜都市| 兰坪| 绥中县| 柳州市| 易门县| 循化| 巴南区| 陆川县| 新宁县| 莒南县| 安阳市| 兰西县| 哈尔滨市| 沁源县| 武强县| 广河县| 富阳市| 称多县| 会同县| 蒙自县| 金堂县| 灵武市| 高要市| 苍山县| 石景山区| 密云县| 揭阳市| 兴业县| 库伦旗| 太白县| 满洲里市| 准格尔旗| 乐山市| 日喀则市|