一、首先要明确各种不同的编码格式
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);
}
小记一笔,每天进步一点点。