一、首先要明確各種不同的編碼格式
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);
}
小記一筆,每天進步一點點。