基於python的漢字轉GBK碼

2022-04-03 10:06:28 字數 2681 閱讀 7213

說明:

思路:從gbk編碼頁面收集漢字

實施:第一步:提取漢字

view code

1 with open('

e:/gbk.txt

') as f:

2 s=f.read().splitlines().split()

分割得到的list裡面有重複的節編碼,要去掉b0/b1……類似的符號和中文的0-9/a-f字元

把獲取到的字元解碼看:

刪除掉這些字元:

先把分割得到的list全部解碼,然後

view code

1 gbk.remove(u'

\uff10

')

這裡刪除字元的時候,用range生成一系列字串,然後用notepad++處理了一下,並沒有找到簡單的辦法

view code

1

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

']:2 gbk.remove(t)

然後去除b0-d7這樣的小節編碼,同時提取字元編碼的時候也要用到類似的a1-fe這樣的編碼,於是就想生成這樣乙個list,方便做刪除和索引操作。

生成編碼系列:

行編碼為0-9 a-f,列編碼為a-f

從a1開始遞增,遇到邊界(a9-aa)要手動處理,用到了ord()和chr()函式,在ascii編碼和數字之間轉換。

1 t=['

a1']

2while true:

3if t[-1]=='

fe':

4break

5continue

8continue

11continue

得到的列表:

有了這個編碼序列後,就可以從gbk庫中刪除b0-d7字元了。

最後檢查到還有空格未刪除,空格的unicode碼是\u3000

gbk.remove(u'

\u3000

')

最後encode成utf-8編碼儲存到字典檔案。

我把這個字典檔案放到網盤上了,外鏈:

第二步:索引漢字

索引就是個簡單演算法,因為字典裡面的漢子是按照原先順序儲存的,而且gbk編碼表2的3755個漢字嚴格遵守每節94個漢字的規律,那就來個簡單的除數取整+1來定位小節編碼,再用漢字索引-節索引*94得到漢字在這一小節中的索引,然後利用上面生成的a1-fe list和索引來定位第二編碼。

演算法思路有了,編碼,然後除錯

附上python**和注釋:

1

def getgbkcode(gbkfile='

e:/gbk1.1.txt

',s=''):2#

gbkfile字典檔案 共3755個漢字3#

s為要轉換的漢字,暫且為gb2312編碼,即從idle輸入的漢字編碼45

#讀入字典

6 with open(gbkfile) as f:

7 gbk=f.read().split()89

#生成a1-fe的索引編碼

10 t=['

a1']

11while true:

12if t[-1]=='

fe':

13break

14continue

17continue

20continue23#

依次索引每個漢字

24 l=list()

25for st in s.decode('

gb2312

'):26 st=st.encode('

utf-8

')27 i=gbk.index(st)+128#

小節編碼從b0開始,獲取漢字的小節編碼

29 t1='

%'+t[t.index('

b0'):][i/94]30#

漢字在節點中的索引號

31 i=i-(i/94)*94

32 t2='%#

最後用空格分隔輸出

35return

''.join(l)

基於python的漢字轉GBK碼

基於python的漢字轉gbk碼 l cooper 說明 思路 從gbk編碼頁面收集漢字 實施 第一步 提取漢字 1 with open e gbk.txt as f 2 s f.read splitlines split 複製 分割得到的list裡面有重複的節編碼,要去掉b0 b1 類似的符號和中...

C語言漢字gbk轉utf 8

一 注意事項 1.請注意漢字內碼 對應字元為 xcc等 和列印出的轉義字元 xcc 的區別!該問題導致我們程式除錯了差不多一整天!見 c語言中轉義字元的使用 2.另外庫函式iconv會把傳入的引數指標移位,這是正常的 請不要認為是自己程式有問題。3.我的終端是utf 8格式,對於其他編碼不能顯示。二...

vfp生成GBK中的所有漢字

二 碼位分配及順序 gbk 亦採用雙位元組表示,總體編碼範圍為8140 fefe,首位元組在81 fe 之間,尾位元組在40 fe 之間,剔除xx7f 一條線。總計23940 個碼位,共收入21886 個漢字和圖形符號,其中漢字 包括部首和構件 21003 個,圖形符號883 個。全部編碼分為三大部...