1. 程式人生 > >python3環境下的全形與半形轉換程式碼和測試

python3環境下的全形與半形轉換程式碼和測試

       全形和半形轉換是文字預處理的常見工作之一,然而現在網上一搜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