摘要:而在使用英文輸入法時(shí)我們將個(gè)英文字符所占的位置稱為半角。需要注意的是只有在支持漢字等語言的計(jì)算及上才存在全角和半角的概念。由于在規(guī)定中半角字符是從開始到結(jié)束。當(dāng)然除了以上的方式外還有其他的方式將全角轉(zhuǎn)換為半角。
原文地址:
http://52sox.com/use-python-t...
關(guān)于全角轉(zhuǎn)換為半角的問題,其實(shí)源自在公司的運(yùn)營人員在輸入法切換的時(shí)候選擇了全角,結(jié)果導(dǎo)致程序有時(shí)候沒有辦法進(jìn)行解析。
為了避免這樣的問題再次出現(xiàn),于是就有了將全角轉(zhuǎn)換為半角的問題了。
在這里,會對以下內(nèi)容進(jìn)行描述:
什么是全角
如何將全角字符轉(zhuǎn)換為半角
使用python實(shí)現(xiàn)上述轉(zhuǎn)換操作
我們知道在編碼中,存儲在計(jì)算機(jī)中僅僅是1個(gè)數(shù)字,而編碼其實(shí)充當(dāng)?shù)氖?種轉(zhuǎn)換的過程,如果將1個(gè)字符轉(zhuǎn)換為1個(gè)數(shù)字而問題。
全角和半角一般情況下,普通的英文字符只占用1個(gè)字節(jié)的空間,而1個(gè)字節(jié)有8位,因此可以存儲256個(gè)字符。而漢字、日語及朝鮮文字這樣CJK的文字很明顯不止256個(gè),因此會使用2個(gè)字節(jié)來存儲。
而在使用英文輸入法時(shí),我們將1個(gè)英文字符所占的位置稱為半角。而由于1個(gè)漢字占用2個(gè)英文字符的位置,因?yàn)槲覀儗⑵浞Q為全角。
需要注意的是,只有在支持漢字等語言的計(jì)算及上才存在全角和半角的概念。另外,雖然通常情況下的英文字母、數(shù)字鍵及符號鍵都是半角的,但是為了排列整齊,英文和其他拉丁文的字符和標(biāo)簽也可以使用全角格式。
因此,我們知道全角需要占用2個(gè)字節(jié),而半角則占用1個(gè)字節(jié)。
在ASCII編碼中,我們知道可以打印的字符只有127-33=94個(gè)。在這里,我們需要去除del鍵及ASCII編碼表中前32位。
由于半角和全角只是占用字節(jié)個(gè)數(shù)的不同,因此全角可打印的字符也是94個(gè)。因此這2者之間是存在規(guī)律的,比如我們假設(shè)半角a字符的在計(jì)算機(jī)中存儲的數(shù)字為60,而全角的a字符在計(jì)算機(jī)中存儲的數(shù)字為1200。而假設(shè)a的下1個(gè)字符為b,其存儲的數(shù)字為61, 那么全角的b字符存儲的數(shù)字應(yīng)為1201。
因此,這種一一映射的關(guān)系就查看各種規(guī)范中是如何定義的了。不同的規(guī)范定義會有所不同。
由于在Unicode規(guī)定中,半角字符是從33開始,到126結(jié)束。而Unicode中全角的編碼是從65281開始到65374結(jié)束。
細(xì)心的你們會發(fā)現(xiàn),這里少了1個(gè)字符,那就是空格。在半角中,空格是32,而在全角中它是12288。
現(xiàn)在,我們使用python來實(shí)現(xiàn)轉(zhuǎn)換的操作,我們會檢查給定的字符是否為全角,只有在全角的情況下才進(jìn)行轉(zhuǎn)換的操作。
def FullToHalf(s): n = [] s = s.decode("utf-8") for char in s: num = ord(char) if num == 0x3000: num = 32 elif 0xFF01 <= num <= 0xFF5E: num -= 0xfee0 num = unichr(num) n.append(num) return "".join(n)
在這里,我們對字符串進(jìn)行遍歷,然后判斷其字符的大小,如果給定的字符是全角則將其進(jìn)行減法操作。最后將其組裝在一起返回就可以了。
然后我們進(jìn)行如下的測試:
s = "張三,是1個(gè)帥哥。" result = FullToHalf(s) print result print "-" * 80 print s
其結(jié)果如下所示:
張三,是1個(gè)帥哥。 ----------------------------------------------------------------------- 張三,是1個(gè)帥哥。
當(dāng)然,除了以上的方式外,還有其他的方式將全角轉(zhuǎn)換為半角。比如我隔壁那個(gè)搞python的哥們直接就用正則進(jìn)行匹配然后批量的進(jìn)行轉(zhuǎn)換。
由于我比較懶和能力比較有限,只好通過上面的方式來簡化我的工作量。
參考文章:
http://www.cnblogs.com/kaituo...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38094.html
摘要:前言最近在爬日文小說的過程中,經(jīng)常遇到全角甚至和和半角混用,造成我強(qiáng)迫癥強(qiáng)烈不適,就著手專門寫一個(gè)腳本處理之思路首先在網(wǎng)上尋找看是否已經(jīng)有現(xiàn)成庫腳本能做到,尋找一番之后只找到一些思路文章,這里就不重復(fù)了有一點(diǎn)要注意,不少文章里是的情況,里面 前言 最近在爬日文小說的過程中,經(jīng)常遇到全角(甚至和和半角混用),造成我(強(qiáng)迫癥)強(qiáng)烈不適,就著手專門寫一個(gè)腳本處理之 思路 首先在網(wǎng)上尋找看是否...
摘要:序本文展示一下如何將進(jìn)行半角與全角轉(zhuǎn)換。術(shù)語全角進(jìn)制轉(zhuǎn)為進(jìn)制半角進(jìn)制轉(zhuǎn)為進(jìn)制工具類全角空格半角空格全角半角轉(zhuǎn)換間隔驗(yàn)證輸出工具類全角半角字符相互轉(zhuǎn)換 序 本文展示一下如何將char進(jìn)行半角與全角轉(zhuǎn)換。 術(shù)語 全角 SBC case Sexagesimal to Binary Converter 60進(jìn)制轉(zhuǎn)為2進(jìn)制 半角 DBC case Decimal to Binary Con...
摘要:全角占兩個(gè)字節(jié)。漢字字符和規(guī)定了全角的英文字符及國標(biāo)中的圖形符號和特殊字符都是全角字符。在全角中,字母和數(shù)字等與漢字一樣占據(jù)著等寬的位置。全角轉(zhuǎn)換為半角 1.什么是全角和半角? 全角:是一種電腦字符,是指一個(gè)全角字符占用兩個(gè)標(biāo)準(zhǔn)字符(或兩個(gè)半角字符)的位置。全角占兩個(gè)字節(jié)。 漢字字符和規(guī)定了全角的英文字符及國標(biāo)GB2312-80中的圖形符號和特殊字符都是全角字符。在全角中,字母和數(shù)字等...
摘要:的簡明圖示使用說明是自帶的開發(fā)工具,參見下圖在的提示符后輸入代碼,回車,就可以執(zhí)行此代碼,參見下圖下面演示用的編輯器編寫程序文件并運(yùn)行程序文件將以為擴(kuò)展名。輸出在屏幕上顯示數(shù)據(jù),將數(shù)據(jù)保存至文件等。 python IDLE的簡明圖示使用說明 IDLE 是python自帶的開發(fā)工具,參見下圖...
閱讀 2486·2023-04-26 02:18
閱讀 1273·2021-10-14 09:43
閱讀 3841·2021-09-26 10:00
閱讀 6986·2021-09-22 15:28
閱讀 2550·2019-08-30 15:54
閱讀 2612·2019-08-30 15:52
閱讀 486·2019-08-29 11:30
閱讀 3475·2019-08-29 11:05