用Python轉換一些常見全角字符爲半角

前言

最近在爬日文小說的過程當中,常常遇到全角(甚至和和半角混用),形成我(強迫症)強烈不適,就着手專門寫一個腳本處理之python

思路

首先在網上尋找看是否已經有現成庫/腳本能作到,尋找一番以後只找到一些思路文章,這裏就不重複了
有一點要注意,很多文章裏是python2的狀況,裏面用的是unichr函數,到python3就變成了chr函數
直接看代碼吧函數

def SBC2DBC(char):
    chr_code = ord(char)
    # 處理全角中數字大等於10的狀況
    if chr_code in range(9312, 9332):
        return str(chr_code - 9311)
    elif chr_code in range(9332, 9352):
        return str(chr_code - 9331)
    elif chr_code in range(9352, 9372):
        return str(chr_code - 9351)
    elif chr_code in range(8544, 8556):
        return str(chr_code - 8543)

    else:
        if chr_code == 12288: # 全角空格,同0x3000
            chr_code = 32
        if chr_code == 8216 or chr_code == 8217:  # ‘’
            chr_code = 39 # '
        elif chr_code in range(65281, 65374):
            chr_code = chr_code - 65248
        return chr(chr_code)


def SBC2DBC_string(string):
    new_string = ''
    for char in string:
        new_string += SBC2DBC(char)
    return new_string

網上大部分文章裏只有全角空格和range(65281,65374)的狀況,我時不時能遇到一些比較奇怪的全角數字,好比⑩ ⑽ ⒑ Ⅻ,這裏也一併處理了code

擴展思考

1 . 某些狀況下全角反而是更好的選擇,好比文件名,其不能用*:/等符號,全角就更適合,固然這屬於另外一個話題,就不在此展開
2 . 羅馬數字的狀況,在現有的全角字符中羅馬數字僅到12,若是某位(喪心病狂的)做者用了多個羅馬數字的話,好比ⅩⅤ,上面的腳本就不合適了(就轉成105),這時候須要先對整個字符串進行處理,找到鏈接在一塊兒的羅馬數字,而後計算並替換,這更像是數據清洗的範疇,也不展開多說了字符串

相關文章
相關標籤/搜索