ホームページ >バックエンド開発 >Python チュートリアル >Pythonベースで漢字をGBKコードに変換する実装コード

Pythonベースで漢字をGBKコードに変換する実装コード

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-16 08:47:092016ブラウズ

図に示すように、「Guang」のエンコーディングは %B9%E3 です。現時点では、%B9 をセクション エンコーディング、%E3 を文字エンコーディング (第 2 エンコーディング) と呼びます。

アイデア:
GBK エンコード ページ http://ff.163.com/newflyff/gbk-list/ から漢字を収集します。
実用的な観点から開始し、「● GBK/」のみを選択します2: GB2312 の「漢字」セクションには、合計 3755 の漢字が含まれています。
ルールを見てください。サブセクションのコーディングは B0 ~ D7 ですが、漢字のコーディングは A1 ~ FE、つまり 16*6-2=94 であり、これは非常に規則的です。
ステップ 1: Python を使用して一般的に使用される漢字を抽出し、辞書ファイルに順番に保存します。漢字はスペースで区切られます。
第 2 ステップ: A1-FE のコーディング規則に従って、セクションごとに 94 文字の漢字を配置し、まずセクション コードを見つけ、特定のセクション内の漢字の位置を使用して文字コードを見つけます

実装:
セクション ステップ 1: 漢字の抽出
コードをコピー コードは次のとおりです:

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

分割リストには繰り返しのセクションコードが含まれているため、 B0/B1... 同様の記号は削除する必要があります。また、中国語の 0-9/A-F 文字
は、取得した文字をデコードします:


これらの文字を削除します:
最初にすべての分割リストをデコードしてから、

コードをコピーします コードは次のとおりです。 :

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のようなセクションコードを抽出すると同時に、文字エンコードを抽出する際にA1~FEのようなエンコードも使用されるため、このようなリストを生成して削除やインデックス作成の操作を容易にしたいと考えています。

コーディング系列を生成します:
行コーディングは 0-9 A-F、列コーディングは A-F です
A1 から開始して増加し、境界 (A9-AA) に遭遇した場合は手動で処理する必要があります。 ord() 関数と chr() 関数を使用して、ASCII エンコードと数値の間で変換します。
コードをコピーします コードは次のとおりです:

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 および ord(t[-1][1])t.append(t[-1][ 0]+ chr(ord(t[-1][1])+1))
続行
if ord(t[-1][1])>=57 かつ ord(t[-1 ][1 ])t.append(t[-1][0]+chr(65))
続行
if ord(t[-1][1])> ;=70 :
t.append(chr(ord(t[-1][0])+1)+chr(48))
続行

結果のリスト:

このエンコード シーケンスを使用すると、gbk ライブラリから B0 ~ D7 文字を削除できます。
最後に、削除されていないスペースが残っていることを確認しました。スペースの Unicode コードは u3000
gbk.remove(u'u3000')
最後に、UTF- にエンコードされます。 8 を辞書ファイルに保存します。


この辞書ファイルをネットワーク ディスクに置きます。外部リンク: http://dl.dbank.com/c0m9selr6h

ステップ 2: 中国語の文字にインデックスを付ける

辞書内の中国語文字は元の順序で格納されており、GBK エンコーディング テーブル 2 の 3755 文字はセクションあたり 94 中国語文字のルールに厳密に従っているため、インデックスは単純なアルゴリズムです。それでは、これを実行しましょう。除数 + 1 を四捨五入してセクション コードを見つけます。次に、漢字インデックス - セクション インデックス * 94 を使用して、このセクションの漢字のインデックスを取得し、上で生成された A1-FE リストとインデックスを使用します。をクリックして 2 番目のコードを見つけます。
アルゴリズムのアイデアがあり、コーディングしてデバッグします
Python コードとコメントを添付します:

コードをコピーします コードは次のとおりです。以下のように:

def getGBKCode(gbkFile='E:/GBK1.1.txt',s=''):
#gbkFile 辞書ファイルには合計 3755 文字の中国語文字があります
#s は中国語です変換する文字、とりあえずはgb2312エンコード、つまりIDLEから入力した漢字エンコードです

#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])=65 および ord(t[-1][1])t.append(t[-1][0]+chr(ord) (t[-1][1])+1))
続行
if ord(t[-1][1])>=57 かつ ord(t[-1][1])t.append(t[-1] [0]+chr(65))
続行
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
#セクションのエンコードが開始されますB0 から、中国語文字のセクション エンコーディングを取得します
t1='%'+ t[t.index('B0'):][i/94]
#ノード内の中国語文字のインデックス番号
i=i-(i/94)*94
t2='%' +t[i-1]
l.append(t1+t2)
#最後に出力をスペースで区切ります
return ' '.join(l)


私の Python コードはそれほどきちんとしていないことを認めなければなりません
私の Weibo ID: XiaoluanCooper を添付します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。