最近在爬日文小說的過程當中,常常遇到全角(甚至和和半角混用),形成我(強迫症)強烈不適,就着手專門寫一個腳本處理之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),這時候須要先對整個字符串進行處理,找到鏈接在一塊兒的羅馬數字,而後計算並替換,這更像是數據清洗的範疇,也不展開多說了字符串