python實現全形半形的相互轉換

2021-09-06 13:54:56 字數 2357 閱讀 1863

緣起

在自然語言處理過程中,全形、半形的的不一致會導致資訊抽取不一致,因此需要統一。

轉換說明

全形半形轉換說明

有規律(不含空格):

全形字符unicode編碼從65281~65374 (十六進製制 0xff01 ~ 0xff5e)

半形字元unicode編碼從33~126 (十六進製制 0x21~ 0x7e)

特例

空格比較特殊,全形為 12288(0x3000),半形為 32(0x20)

除空格外,全形/半形按unicode編碼排序在順序上是對應的(半形 + 0x7e= 全形),所以可以直接通過用+-法來處理非空格資料,對空格單獨處理。

注:1. 中文文字永遠是全形,只有英文本母、數字鍵、符號鍵才有全形半形的概念,乙個字母或數字佔乙個漢字的位置叫全形,佔半個漢字的位置叫半形。

2. 引號在中英文、全半形情況下是不同的

參考**

#

-*- coding: cp936 -*-

defstrq2b(ustring):

"""全形轉半形

"""rstring = ""

for uchar in

ustring:

inside_code=ord(uchar)

if inside_code == 12288: #全形空格直接轉換

inside_code = 32

elif (inside_code >= 65281 and inside_code <= 65374): #

全形字符(除空格)根據關係轉化

inside_code -= 65248rstring +=unichr(inside_code)

return

rstring

defstrb2q(ustring):

"""半形轉全形

"""rstring = ""

for uchar in

ustring:

inside_code=ord(uchar)

if inside_code == 32: #

半形空格直接轉化

inside_code = 12288

elif inside_code >= 32 and inside_code <= 126: #

半形字元(除空格)根據關係轉化

inside_code += 65248rstring +=unichr(inside_code)

return

rstring

b = strq2b("

mn123abc

".decode('

cp936

'))

print

bc = strb2q("

mn123abc

".decode('

cp936

'))

print

c

執行結果

庫函式說明chr()函式用乙個範圍在range(256)內的(就是0~255)整數作引數,返回乙個對應的字元。

unichr()跟它一樣,只不過返回的是unicode字元。

ord()函式是chr()函式(對於8位的ascii字串)或unichr()函式(對於unicode物件)的配對函式,它以乙個字元(長度為1的字串)作為引數,返回對應的ascii數值,或者unicode數值。

案例

python實現全形半形的相互轉換

轉換說明 全形半形轉換說明 全形字符unicode編碼從65281 65374 十六進製制 0xff01 0xff5e 半形字元unicode編碼從33 126 十六進製制 0x21 0x7e 空格比較特殊,全形為 12288 0x3000 半形為 32 0x20 除空格外,全形 半形按unicod...

半形全形相互轉換

全形空格為12288,半形空格為32 其他字元半形 33 126 與全形 65281 65374 的對應關係是 均相差65248 code 全形空格為12288,半形空格為32 其他字元半形 33 126 與全形 65281 65374 的對應關係是 均相差65248 半形轉換為全形函式 funct...

全形轉半形 半形轉全形(Python)

coding utf 8 def str q2b u string 全形轉半形 全形字符unicode編碼從65281 65374 十六進製制 0xff01 0xff5e 半形字元unicode編碼從33 126 十六進製制 0x21 0x7e 空格比較特殊,全形為 12288 0x3000 半形為...