国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實(shí)現(xiàn)全角半角字符互轉(zhuǎn)的方法

2019-11-25 16:28:54
字體:
供稿:網(wǎng)友

前言

相信對于每一個編程人員來說,在文本處理的時候,經(jīng)常會遇到全角半角不一致的問題。于是需要程序能夠快速的在兩者之間互轉(zhuǎn)。由于全角半角本身存在著映射關(guān)系,所以處理起來并不復(fù)雜。

具體規(guī)則為:

      全角字符unicode編碼從65281~65374 (十六進(jìn)制 0xFF01 ~ 0xFF5E)

      半角字符unicode編碼從33~126 (十六進(jìn)制 0x21~ 0x7E)

      空格比較特殊,全角為 12288(0x3000),半角為 32(0x20)

      而且除空格外,全角/半角按unicode編碼排序在順序上是對應(yīng)的(半角 + 65248 = 全角)

所以可以直接通過用+-法來處理非空格數(shù)據(jù),對空格單獨(dú)處理。

用到的一些函數(shù)

      chr()函數(shù)用一個范圍在range(256)內(nèi)的(就是0~255)整數(shù)作參數(shù),返回一個對應(yīng)的字符。

      unichr()跟它一樣,只不過返回的是Unicode字符。

      ord()函數(shù)是chr()函數(shù)或unichr()函數(shù)的配對函數(shù),它以一個字符(長度為1的字符串)作為參數(shù),返回對應(yīng)的ASCII數(shù)值,或者Unicode數(shù)值。

先來打印下映射關(guān)系:

for i in xrange(33,127): print i,chr(i),i+65248,unichr(i+65248)

返回結(jié)果

33 ! 65281 !34 " 65282 "35 # 65283 #36 $ 65284 $37 % 65285 %38 & 65286 &39 ' 65287 '40 ( 65288 (41 ) 65289 )42 * 65290 *43 + 65291 +44 , 65292 ,45 - 65293 -46 . 65294 .47 / 65295 /48 0 65296 049 1 65297 150 2 65298 251 3 65299 352 4 65300 453 5 65301 554 6 65302 655 7 65303 756 8 65304 857 9 65305 958 : 65306 :59 ; 65307 ;60 < 65308 <61 = 65309 =62 > 65310 >63 ? 65311 ?64 @ 65312 @65 A 65313 A66 B 65314 B67 C 65315 C68 D 65316 D69 E 65317 E70 F 65318 F71 G 65319 G72 H 65320 H73 I 65321 I74 J 65322 J75 K 65323 K76 L 65324 L77 M 65325 M78 N 65326 N79 O 65327 O80 P 65328 P81 Q 65329 Q82 R 65330 R83 S 65331 S84 T 65332 T85 U 65333 U86 V 65334 V87 W 65335 W88 X 65336 X89 Y 65337 Y90 Z 65338 Z91 [ 65339 [92 / 65340 \93 ] 65341 ]94 ^ 65342 ^95 _ 65343 _96 ` 65344 `97 a 65345 a98 b 65346 b99 c 65347 c100 d 65348 d101 e 65349 e102 f 65350 f103 g 65351 g104 h 65352 h105 i 65353 i106 j 65354 j107 k 65355 k108 l 65356 l109 m 65357 m110 n 65358 n111 o 65359 o112 p 65360 p113 q 65361 q114 r 65362 r115 s 65363 s116 t 65364 t117 u 65365 u118 v 65366 v119 w 65367 w120 x 65368 x121 y 65369 y122 z 65370 z123 { 65371 {124 | 65372 |125 } 65373 }126 ~ 65374 ~

把全角轉(zhuǎn)成半角:

def full2half(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)

把半角轉(zhuǎn)成全角:

def half2full(s): n = [] s = s.decode('utf-8') for char in s: num = char(char) if num == 320:  num = 0x3000 elif 0x21 <= num <= 0x7E:  num += 0xfee0 num = unichr(num) n.append(num)return ''.join(n)

上面的實(shí)現(xiàn)方式非常的簡單,但是現(xiàn)實(shí)情況下可能并不會把所以的字符統(tǒng)一進(jìn)行轉(zhuǎn)換,比如中文文章中我們期望將所有出現(xiàn)的字母和數(shù)字全部轉(zhuǎn)化成半角,而常見標(biāo)點(diǎn)符號統(tǒng)一使用全角,上面的轉(zhuǎn)化就不適合了。

解決方案,是自定義詞典。

#!/usr/bin/env python# -*- coding: utf-8 -*- FH_SPACE = FHS = ((u" ", u" "),)FH_NUM = FHN = ( (u"0", u"0"), (u"1", u"1"), (u"2", u"2"), (u"3", u"3"), (u"4", u"4"), (u"5", u"5"), (u"6", u"6"), (u"7", u"7"), (u"8", u"8"), (u"9", u"9"),)FH_ALPHA = FHA = ( (u"a", u"a"), (u"b", u"b"), (u"c", u"c"), (u"d", u"d"), (u"e", u"e"), (u"f", u"f"), (u"g", u"g"), (u"h", u"h"), (u"i", u"i"), (u"j", u"j"), (u"k", u"k"), (u"l", u"l"), (u"m", u"m"), (u"n", u"n"), (u"o", u"o"), (u"p", u"p"), (u"q", u"q"), (u"r", u"r"), (u"s", u"s"), (u"t", u"t"), (u"u", u"u"), (u"v", u"v"), (u"w", u"w"), (u"x", u"x"), (u"y", u"y"), (u"z", u"z"), (u"A", u"A"), (u"B", u"B"), (u"C", u"C"), (u"D", u"D"), (u"E", u"E"), (u"F", u"F"), (u"G", u"G"), (u"H", u"H"), (u"I", u"I"), (u"J", u"J"), (u"K", u"K"), (u"L", u"L"), (u"M", u"M"), (u"N", u"N"), (u"O", u"O"), (u"P", u"P"), (u"Q", u"Q"), (u"R", u"R"), (u"S", u"S"), (u"T", u"T"), (u"U", u"U"), (u"V", u"V"), (u"W", u"W"), (u"X", u"X"), (u"Y", u"Y"), (u"Z", u"Z"),)FH_PUNCTUATION = FHP = ( (u".", u"."), (u",", u","), (u"!", u"!"), (u"?", u"?"), (u"”", u'"'), (u"'", u"'"), (u"‘", u"`"), (u"@", u"@"), (u"_", u"_"), (u":", u":"), (u";", u";"), (u"#", u"#"), (u"$", u"$"), (u"%", u"%"), (u"&", u"&"), (u"(", u"("), (u")", u")"), (u"

主站蜘蛛池模板:
永顺县|
民丰县|
河曲县|
海兴县|
祁阳县|
商河县|
阳泉市|
西吉县|
武城县|
夏津县|
无锡市|
柘荣县|
丹阳市|
峨边|
南平市|
富锦市|
南郑县|
辽阳县|
青浦区|
洪湖市|
井陉县|
凤山县|
廉江市|
元朗区|
沂源县|
茂名市|
枣阳市|
尼勒克县|
祁阳县|
尚义县|
嘉义县|
花莲县|
昌吉市|
铜梁县|
上饶县|
尖扎县|
乌兰察布市|
合水县|
泽普县|
丽水市|
射洪县|