亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、前言

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

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

二、功能特點

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

相關(guān)文章

  • c++超細致講解引用

    c++超細致講解引用

    引用(reference)就是C++對C語言的重要擴充。引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣
    2022-05-05
  • C語言實現(xiàn)餐廳點餐系統(tǒng)

    C語言實現(xiàn)餐廳點餐系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)餐廳點餐系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • QT實現(xiàn)FTP上傳文件

    QT實現(xiàn)FTP上傳文件

    這篇文章主要為大家詳細介紹了QT實現(xiàn)FTP上傳文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • OPENCV批量讀取圖片實現(xiàn)方法

    OPENCV批量讀取圖片實現(xiàn)方法

    下面小編就為大家?guī)硪黄狾PENCV批量讀取圖片實現(xiàn)方法。小編覺得挺不錯的?,F(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • sublime text3搭建配置c語言編譯環(huán)境的詳細圖解教程(小白級)

    sublime text3搭建配置c語言編譯環(huán)境的詳細圖解教程(小白級)

    這篇文章主要介紹了sublime text3搭建配置c語言編譯環(huán)境,詳細圖解,小白教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • C語言數(shù)據(jù)結(jié)構(gòu)之隊列的定義與實現(xiàn)

    C語言數(shù)據(jù)結(jié)構(gòu)之隊列的定義與實現(xiàn)

    隊列是一種特殊的線性表,特殊之處在于它只允許在表的前端(head)進行刪除操作,而在表的后端(tail)進行插入操作。本文將詳細講講C語言中隊列的定義與實現(xiàn),感興趣的可以了解一下
    2022-07-07
  • C++中#pragma once與#ifndef對比分析

    C++中#pragma once與#ifndef對比分析

    當(dāng)我們編寫C++代碼時,經(jīng)常需要使用頭文件來引入一些常用的函數(shù)、類或者變量,如果一個頭文件被重復(fù)包含,就會導(dǎo)致編譯錯誤或者運行時錯,為了避免發(fā)生,我們需要使用預(yù)處理指令來防止頭文件被重復(fù)包含,常用的預(yù)處理指令有#pragma once和#ifndef,需要的朋友可以參考下
    2023-05-05
  • C語言實現(xiàn)簡易網(wǎng)絡(luò)聊天室

    C語言實現(xiàn)簡易網(wǎng)絡(luò)聊天室

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易網(wǎng)絡(luò)聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言求向量和的兩則問題解答分享

    C語言求向量和的兩則問題解答分享

    這篇文章主要介紹了C語言求向量和的兩則問題解答分享,分別是求連續(xù)子向量的最大和和任何連續(xù)最接近0的子向量的和的問題,需要的朋友可以參考下
    2016-04-04
  • 用VC++6.0的控制臺實現(xiàn)2048小游戲的程序

    用VC++6.0的控制臺實現(xiàn)2048小游戲的程序

    本文是作者拜讀劉地同學(xué)的《C語言控制臺版2048》之后感覺非常不錯,添加了注釋之后分享給大家的,方便更多的初學(xué)者閱讀學(xué)習(xí),有需要的小伙伴參考下。
    2015-03-03

最新評論