最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

基于python的漢字轉(zhuǎn)GBK碼實現(xiàn)代碼

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 14:17:31
文檔

基于python的漢字轉(zhuǎn)GBK碼實現(xiàn)代碼

基于python的漢字轉(zhuǎn)GBK碼實現(xiàn)代碼:如圖,廣的編碼為%B9%E3,暫且把%B9稱為節(jié)編碼,%E3為字符編碼(第二編碼)。 思路: 從GBK編碼頁面收集漢字 http://ff.163.com/newflyff/gbk-list/ 從實用角度下手,只選取● GBK/2: GB2312 漢字這一節(jié),共3755個漢字。 看規(guī)律:小節(jié)編
推薦度:
導(dǎo)讀基于python的漢字轉(zhuǎn)GBK碼實現(xiàn)代碼:如圖,廣的編碼為%B9%E3,暫且把%B9稱為節(jié)編碼,%E3為字符編碼(第二編碼)。 思路: 從GBK編碼頁面收集漢字 http://ff.163.com/newflyff/gbk-list/ 從實用角度下手,只選取● GBK/2: GB2312 漢字這一節(jié),共3755個漢字。 看規(guī)律:小節(jié)編


如圖,“廣”的編碼為%B9%E3,暫且把%B9稱為節(jié)編碼,%E3為字符編碼(第二編碼)。

思路:
從GBK編碼頁面收集漢字 http://ff.163.com/newflyff/gbk-list/
從實用角度下手,只選取“● GBK/2: GB2312 漢字”這一節(jié),共3755個漢字。
看規(guī)律:小節(jié)編碼從B0-D7,而針對漢字的編碼從A1-FE,即16*6-2=94,非常有規(guī)律性。
第一步:把常用的漢字用python提取出來,按順序存到一個字典文件里面,漢字用空格分隔。
第二步:根據(jù)編碼從A1-FE,每節(jié)94個漢字的規(guī)律,先定位節(jié)編碼,利用漢字在某一節(jié)的位置定位字符編碼

實施:
第一步:提取漢字
代碼如下:


with open('E:/GBK.txt') as f:
s=f.read().splitlines().split()


分割得到的list里面有重復(fù)的節(jié)編碼,要去掉B0/B1……類似的符號和中文的0-9/A-F字符
把獲取到的字符解碼看:


刪除掉這些字符:
先把分割得到的list全部解碼,然后
代碼如下:


gbk.remove(u'uff10')


這里刪除字符的時候,用range生成一系列字符串,然后用notepad++處理了一下,并沒有找到簡單的辦法
代碼如下:


for t in [u'uff10',u'uff11',u'uff12',u'uff13',u'uff14',u'uff15',u'uff16',u'uff17',u'uff18',u'uff19',u'uff21',u'uff22',u'uff23',u'uff24',u'uff25',u'uff26']:
gbk.remove(t)


然后去除B0-D7這樣的小節(jié)編碼,同時提取字符編碼的時候也要用到類似的A1-FE這樣的編碼,于是就想生成這樣一個list,方便做刪除和索引操作。

生成編碼系列:
行編碼為0-9 A-F,列編碼為A-F
從A1開始遞增,遇到邊界(A9-AA)要手動處理,用到了ord()和chr()函數(shù),在ASCII編碼和數(shù)字之間轉(zhuǎn)換。
代碼如下:


t=['A1']
while True:
if t[-1]=='FE':
break
if (ord(t[-1][1])>=48 and ord(t[-1][1])<57) or (ord(t[-1][1])>=65 and ord(t[-1][1])<70):
t.append(t[-1][0]+chr(ord(t[-1][1])+1))
continue
if ord(t[-1][1])>=57 and ord(t[-1][1])<65:
t.append(t[-1][0]+chr(65))
continue
if ord(t[-1][1])>=70:
t.append(chr(ord(t[-1][0])+1)+chr(48))
continue


得到的列表:

有了這個編碼序列后,就可以從gbk庫中刪除B0-D7字符了。
最后檢查到還有空格未刪除,空格的unicode碼是u3000
gbk.remove(u'u3000')
最后encode成UTF-8編碼保存到字典文件。


我把這個字典文件放到網(wǎng)盤上了,外鏈:http://dl.dbank.com/c0m9selr6h

第二步:索引漢字

索引就是個簡單算法,因為字典里面的漢子是按照原先順序存儲的,而且GBK編碼表2的3755個漢字嚴(yán)格遵守每節(jié)94個漢字的規(guī)律,那就來個簡單的除數(shù)取整+1來定位小節(jié)編碼,再用漢字索引-節(jié)索引*94得到漢字在這一小節(jié)中的索引,然后利用上面生成的A1-FE list和索引來定位第二編碼。
算法思路有了,編碼,然后調(diào)試
附上python代碼和注釋:
代碼如下:


def getGBKCode(gbkFile='E:/GBK1.1.txt',s=''):
#gbkFile字典文件 共3755個漢字
#s為要轉(zhuǎn)換的漢字,暫且為gb2312編碼,即從IDLE輸入的漢字編碼

#讀入字典
with open(gbkFile) as f:
gbk=f.read().split()

#生成A1-FE的索引編碼
t=['A1']
while True:
if t[-1]=='FE':
break
if (ord(t[-1][1])>=48 and ord(t[-1][1])<57) or (ord(t[-1][1])>=65 and ord(t[-1][1])<70):
t.append(t[-1][0]+chr(ord(t[-1][1])+1))
continue
if ord(t[-1][1])>=57 and ord(t[-1][1])<65:
t.append(t[-1][0]+chr(65))
continue
if ord(t[-1][1])>=70:
t.append(chr(ord(t[-1][0])+1)+chr(48))
continue
#依次索引每個漢字
l=list()
for st in s.decode('gb2312'):
st=st.encode('utf-8')
i=gbk.index(st)+1
#小節(jié)編碼從B0開始,獲取漢字的小節(jié)編碼
t1='%'+t[t.index('B0'):][i/94]
#漢字在節(jié)點中的索引號
i=i-(i/94)*94
t2='%'+t[i-1]
l.append(t1+t2)
#最后用空格分隔輸出
return ' '.join(l)



得承認(rèn)我的python代碼不是那么工整
附上我的微博ID:小欒Cooper

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

基于python的漢字轉(zhuǎn)GBK碼實現(xiàn)代碼

基于python的漢字轉(zhuǎn)GBK碼實現(xiàn)代碼:如圖,廣的編碼為%B9%E3,暫且把%B9稱為節(jié)編碼,%E3為字符編碼(第二編碼)。 思路: 從GBK編碼頁面收集漢字 http://ff.163.com/newflyff/gbk-list/ 從實用角度下手,只選取● GBK/2: GB2312 漢字這一節(jié),共3755個漢字。 看規(guī)律:小節(jié)編
推薦度:
標(biāo)簽: 漢字 漢字的 的漢字
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top