首先,需要明確為什麼要把全形轉換成半形。
一般在業務實現中,日文或英文可以輸入全形,同樣的名字用全形和半形輸入應該代表同乙個意思,
但是在排序中全形要排在半形的後面,這不符合某些人(當然,是所謂產品經理)的邏輯,那只有硬著頭皮分析轉換咯;
下面我們來看全形和半形所在的unicode區間對照表:
ascii
全形字符
unicode
半形字元
unicode
0x20
""空格
u+3000
" "空格
u+0020
0x21
!u+ff01
!u+0021
0x22
"u+ff02
"u+0022
0x23
#u+ff03
#u+0023
0x24
$u+ff04
$u+0024
0x25
%u+ff05
%u+0025
0x26
&u+ff06
&u+0026
0x27
『u+ff07
『u+0027
0x28
(u+ff08
(u+0028
0x29
)u+ff09
)u+0029
0x2a
*u+ff0a
*u+002a
0x2b
+u+ff0b
+u+002b
0x2c
,u+ff0c
,u+002c
0x2d
-u+ff0d
-u+002d
0x2e
.u+ff0e
.u+002e
0x2f
/u+ff0f
/u+002f
0x30
0u+ff10
0u+0030
0x31
1u+ff11
1u+0031
0x32
2u+ff12
2u+0032
0x33
3u+ff13
3u+0033
0x34
4u+ff14
4u+0034
0x35
5u+ff15
5u+0035
0x36
6u+ff16
6u+0036
0x37
7u+ff17
7u+0037
0x38
8u+ff18
8u+0038
0x39
9u+ff19
9u+0039
0x3a
:u+ff1a
:u+003a
0x3b
;u+ff1b
;u+003b
0x3c
<
u+ff1c
<
u+003c
0x3d
=u+ff1d
=u+003d
0x3e
>
u+ff1e
>
u+003e
0x3f
?u+ff1f
?u+003f
0x40
@u+ff20
@u+0040
0x41
au+ff21
au+0041
0x42
bu+ff22
bu+0042
0x43
cu+ff23
cu+0043
0x44
du+ff24
du+0044
0x45
eu+ff25
eu+0045
0x46
fu+ff26
fu+0046
0x47
gu+ff27
gu+0047
0x48
hu+ff28
hu+0048
0x49
iu+ff29
iu+0049
0x4a
ju+ff2a
ju+004a
0x4b
ku+ff2b
ku+004b
0x4c
lu+ff2c
lu+004c
0x4d
mu+ff2d
mu+004d
0x4e
nu+ff2e
nu+004e
0x4f
ou+ff2f
ou+004f
0x50
pu+ff30
pu+0050
0x51
qu+ff31
qu+0051
0x52
ru+ff32
ru+0052
0x53
su+ff33
su+0053
0x54
tu+ff34
tu+0054
0x55
uu+ff35
uu+0055
0x56
vu+ff36
vu+0056
0x57
wu+ff37
wu+0057
0x58
xu+ff38
xu+0058
0x59
yu+ff39
yu+0059
0x5a
zu+ff3a
zu+005a
0x5b
[u+ff3b
[u+005b
0x5c
\u+ff3c
\u+005c
0x5d
]u+ff3d
]u+005d
0x5e
^u+ff3e
^u+005e
0x5f
_u+ff3f
_u+005f
0x60
『u+ff40
`u+0060
0x61
au+ff41
au+0061
0x62
bu+ff42
bu+0062
0x63
cu+ff43
cu+0063
0x64
du+ff44
du+0064
0x65
eu+ff45
eu+0065
0x66
fu+ff46
fu+0066
0x67
gu+ff47
gu+0067
0x68
hu+ff48
hu+0068
0x69
iu+ff49
iu+0069
0x6a
ju+ff4a
ju+006a
0x6b
ku+ff4b
ku+006b
0x6c
lu+ff4c
lu+006c
0x6d
mu+ff4d
mu+006d
0x6e
nu+ff4e
nu+006e
0x6f
ou+ff4f
ou+006f
0x70
pu+ff50
pu+0070
0x71
qu+ff51
qu+0071
0x72
ru+ff52
ru+0072
0x73
su+ff53
su+0073
0x74
tu+ff54
tu+0074
0x75
uu+ff55
uu+0075
0x76
vu+ff56
vu+0076
0x77
wu+ff57
wu+0077
0x78
xu+ff58
xu+0078
0x79
yu+ff59
yu+0079
0x7a
zu+ff5a
zu+007a
0x7b
u+ff5d
}u+007d
0x7e
~u+ff5e
~u+007e
仔細的小夥伴可以發現,除了第乙個空格的全半形unicode編碼值為(0x3000-0x0020)=0x2fe0(12256)外,其它字元的全半形unicode差均為0xfee0(65248)
那麼發現這個規律,可以說我們就已經完成了轉換;對應**實現,由於語言差別,小夥伴根據自己實現方式實現吧;
全形轉半形 半形轉全形(Python)
coding utf 8 def str q2b u string 全形轉半形 全形字符unicode編碼從65281 65374 十六進製制 0xff01 0xff5e 半形字元unicode編碼從33 126 十六進製制 0x21 0x7e 空格比較特殊,全形為 12288 0x3000 半形為...
全形轉半形與半形轉全形
1.全形 指乙個字元占用兩個標準字元位置。漢字字元和規定了全形的英文本元及國標gb2312 80中的圖形符號和特殊字元都是全形字符。一般的系統命令是不用全形字符的,只是在作文書處理時才會使用全形字符。2.半形 指一字元占用乙個標準的字元位置。通常的英文本母 數字鍵 符號鍵都是半形的,半形的顯示內碼都...
全形轉半形
轉半形的函式 dbc case 全形空格為12288,半形空格為32 其他字元半形 33 126 與全形 65281 65374 的對應關係是 均相差65248 param input 任意字串 return 半形字串 public static string todbc string input ...