QT/python 繁體中文識別和文件轉化

一、首先要明確各種不同的編碼格式 

       1、iso-8859-1:標準碼,最初是在美國等國家發明的 所以表示字符只有簡單的幾個字母只要對字母進行編碼。編碼是單字節編碼,向下兼容ASCII,其編碼範圍是0x00-0xFF,0x00-0x7F之間完全和ASCII一致,0x80-0x9F之間是控制字符,0xA0-0xFF之間是文字符號。此字符集主要支持歐洲使用的語言。

  2、GBK:是指中國的中文字符,其它它包含了簡體中文與繁體中文字符,另外還有一種字符“gb2312”,這種字符僅能存儲簡體中文字符。GBK編碼格式,它的功能少,僅限於中文字符,漢字國標擴展碼,又由於GBK同時也涵蓋了Unicode所有CJK漢字,所以也可以和Unicode做一一對應。

  3、UniCode:多了個阿拉伯語、日語、韓語......所以就出來統一編碼UniCode。Unicode編碼指的是UCS-2編碼方式,即直接用兩個字節存入字符的Unicode碼。這個選項用的little endian格式。

  4、utf-8:它是一種全國家通過的一種編碼,UTF8編碼格式很強大,支持所有國家的語言,正是因爲它的強大,纔會導致它佔用的空間大小要比GBK大,UTF-8就是在互聯網上使用最廣的一種unicode的實現方式。

  5、ANSI:是默認的編碼方式。對於英文文件是ASCII編碼,對於簡體中文文件是GB2312編碼(只針對Windows簡體中文版,如果是繁體中文版會採用Big5碼)。

       6、big5: 中文繁體編碼

二、識別當前文本的編碼格式

       ---將文本文件加載到excel中,看哪一種是它對應的編碼格式。

 

 

 

 只要能完全顯示所有的信息就可以確定他是什麼編碼方式,我們這個文件就是big5編碼。

三、用python預演功能 

我實現是是從文本轉爲excel文件,我一般選擇先用python預演實現的邏輯是否OK,後面再用QT去實現。<因爲python可以花費最短的時間實現對應的功能,可以在很短的時間內看到效果>

下面是 `python實現的代碼片`。
import datetime
import time
import os
import sys
import xlwt
path = r"D:\work_note\GZXP\RankTable"


def txt2xls(fp, file):
    if os.path.exists(fp):
        print(fp)
        print("正在處理", fp)
        f = open(fp,encoding='big5') 
        wb = xlwt.Workbook()
        ws1 = wb.add_sheet("Sheet1")

        i = 0
        for line in f.readlines():
            j = 0
            for item in line.split(','):
                try:
                    item = item.replace('"','')
                except UnicodeDecodeError:
                    print(i, j, item)
                    ws1.write(i, j, "NULL")
                else:
                    ws1.write(i, j, item)
                j = j + 1
            i = i + 1
        f.close()
        wb.save("D:\work_note\GZXP\RankTable"+ "\\" + str(file[-10:-4]) + '.xls')


def getfiles():
    files = os.listdir(path)
    for file in files:
        # print(file)
        # print file[-10:-4]
        fp = path + "\\" + file
        print(fp)
        txt2xls(fp, file)


if __name__ == '__main__':
    getfiles()
    print("處理完畢,按回車鍵結束程序。")

四、用QT實現

QFile file(strFilePath);
	QTextCodec* codec = QTextCodec::codecForName("big5");
	if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
	{
		return false;
	}
	QList<QStringList> lstData;
	while (!file.atEnd())
	{
		QString str = codec->toUnicode(file.readLine());
		str = str.replace('"', ' ');
		QStringList data = str.split(',');
		lstData.push_back(data);
	}

小記一筆,每天進步一點點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章