自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用Python轉換全角字符串為半角

開發(fā) 開發(fā)工具
關于全角轉換為半角的問題,其實源自在公司的運營人員在輸入法切換的時候選擇了全角,結果導致程序有時候沒有辦法進行解析。 為了避免這樣的問題再次出現(xiàn),于是就有了將全角轉換為半角的問題了。

關于全角轉換為半角的問題,其實源自在公司的運營人員在輸入法切換的時候選擇了全角,結果導致程序有時候沒有辦法進行解析。

為了避免這樣的問題再次出現(xiàn),于是就有了將全角轉換為半角的問題了。

在這里,會對以下內(nèi)容進行描述:

  • 什么是全角
  • 如何將全角字符轉換為半角
  • 使用python實現(xiàn)上述轉換操作

我們知道在編碼中,存儲在計算機中僅僅是1個數(shù)字,而編碼其實充當?shù)氖?種轉換的過程,如果將1個字符轉換為1個數(shù)字而問題。

全角和半角

一般情況下,普通的英文字符只占用1個字節(jié)的空間,而1個字節(jié)有8位,因此可以存儲256個字符。而漢字、日語及朝鮮文字這樣CJK的文字很明顯不止256個,因此會使用2個字節(jié)來存儲。

而在使用英文輸入法時,我們將1個英文字符所占的位置稱為半角。而由于1個漢字占用2個英文字符的位置,因為我們將其稱為全角。

需要注意的是,只有在支持漢字等語言的計算及上才存在全角和半角的概念。另外,雖然通常情況下的英文字母、數(shù)字鍵及符號鍵都是半角的,但是為了排列整齊,英文和其他拉丁文的字符和標簽也可以使用全角格式。

因此,我們知道全角需要占用2個字節(jié),而半角則占用1個字節(jié)。

全角轉換為半角

在ASCII編碼中,我們知道可以打印的字符只有127-33=94個。在這里,我們需要去除del鍵及ASCII編碼表中前32位。

由于半角和全角只是占用字節(jié)個數(shù)的不同,因此全角可打印的字符也是94個。因此這2者之間是存在規(guī)律的,比如我們假設半角a字符的在計算機中存儲的數(shù)字為60,而全角的a字符在計算機中存儲的數(shù)字為1200。而假設a的下1個字符為b,其存儲的數(shù)字為61, 那么全角的b字符存儲的數(shù)字應為1201。

因此,這種一一映射的關系就查看各種規(guī)范中是如何定義的了。不同的規(guī)范定義會有所不同。

由于在Unicode規(guī)定中,半角字符是從33開始,到126結束。而Unicode中全角的編碼是從65281開始到65374結束。

細心的你們會發(fā)現(xiàn),這里少了1個字符,那就是空格。在半角中,空格是32,而在全角中它是12288。

python的實現(xiàn)轉換

現(xiàn)在,我們使用python來實現(xiàn)轉換的操作,我們會檢查給定的字符是否為全角,只有在全角的情況下才進行轉換的操作。

  1. def FullToHalf(s): 
  2.     n = [] 
  3.     s = s.decode('utf-8'
  4.     for char in s: 
  5.         num = ord(char
  6.         if num == 0x3000: 
  7.             num = 32 
  8.         elif 0xFF01 <= num <= 0xFF5E: 
  9.             num -= 0xfee0 
  10.         num = unichr(num) 
  11.         n.append(num) 
  12.     return ''.join(n) 

 

在這里,我們對字符串進行遍歷,然后判斷其字符的大小,如果給定的字符是全角則將其進行減法操作。***將其組裝在一起返回就可以了。

然后我們進行如下的測試:

  1. s = "張三,是1個帥哥。" 
  2. result = FullToHalf(s) 
  3. print result 
  4. print '-' * 80 
  5. print s 

 

其結果如下所示:

  1. 張三,是1個帥哥。 
  2. ----------------------------------------------------------------------- 
  3. 張三,是1個帥哥。 

 

當然,除了以上的方式外,還有其他的方式將全角轉換為半角。比如我隔壁那個搞python的哥們直接就用正則進行匹配然后批量的進行轉換。

由于我比較懶和能力比較有限,只好通過上面的方式來簡化我的工作量。

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2009-08-21 09:09:05

C#字符串

2021-11-24 09:08:38

LeetCode字符串算法

2024-02-19 15:38:08

JsonPython字符串

2010-11-26 14:09:32

MySQL內(nèi)置函數(shù)

2010-03-10 15:06:16

python字符串

2024-03-12 07:35:39

Python字符串列表

2017-01-16 16:33:06

Python 字符串漏洞

2019-03-25 20:31:58

IP地址轉換數(shù)字

2021-08-20 06:58:31

C++Python函數(shù)

2010-10-11 15:47:46

MySQL字符串大小寫

2021-12-29 16:40:54

Python語言字符串

2023-10-27 07:03:22

字符串String類型

2023-08-26 20:21:58

字符KotlinJava

2023-01-09 09:52:06

Bash字符串

2023-08-21 10:28:00

字符串字符Python

2024-08-16 22:00:38

2010-09-14 14:32:02

sql server日

2021-11-29 08:49:37

字符串轉換整數(shù)

2010-07-14 16:10:37

Perl

2011-08-22 10:59:42

SQL Server日期時間格式轉換字符串
點贊
收藏

51CTO技術棧公眾號