python3環境下的全形與半形轉換程式碼和測試
阿新 • • 發佈:2018-12-10
全形和半形轉換是文字預處理的常見工作之一,然而現在網上一搜python的相關程式碼,幾乎都是python2版本的,因此根據人角和半形的轉換規律,將其程式碼撰寫如下:
1、全形與半形之間的轉換規律
角字元unicode編碼從65281~65374 (十六進位制 0xFF01 ~ 0xFF5E) 半形字元unicode編碼從33~126 (十六進位制 0x21~ 0x7E)
-
特殊的:
空格比較特殊,全形為 12288(0x3000),半形為 32(0x20)
除空格外,全形/半形按unicode編碼排序在順序上是對應的(半形 + 0x7e= 全形),所以可以直接通過用+-法來處理非空格資料,對空格單獨處理。
2、轉換程式碼指令碼(python3)
def strQ2B(ustring): """把字串全形轉半形""" ss = [] for s in ustring: rstring = "" for uchar in s: inside_code = ord(uchar) if inside_code == 12288: # 全形空格直接轉換 inside_code = 32 elif (inside_code >= 65281 and inside_code <= 65374): # 全形字元(除空格)根據關係轉化 inside_code -= 65248 rstring += chr(inside_code) ss.append(rstring) return ''.join(ss)
def strB2Q(ustring): """把字串全形轉半形""" ss = [] for s in ustring: rstring = "" for uchar in s: inside_code = ord(uchar) if inside_code == 32: # 全形空格直接轉換 inside_code = 12288 elif (inside_code >= 33 and inside_code <= 126): # 全形字元(除空格)根據關係轉化 inside_code += 65248 rstring += chr(inside_code) ss.append(rstring) return ''.join(ss) if __name__ == '__main__': a = strB2Q("你好pythonabdalduizxcvbnm") print(a) b = strQ2B(a) print(b)
測試:得到的結果如下所示:
你好pythonabdalduizxcvbnm 你好pythonabdalduizxcvbnm