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);
	}

小记一笔,每天进步一点点。

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