全角半角字符互换

我们在转换全角字符和半角字符之前,需要弄清楚全角与半角字符的定义。

全角字符:是指一个字符占用了两个标准字符的位置。汉字字符和规定了全角的英文字符及国标GB2312-1980中的图形符号和特殊的字符都是全角字符。

半角字符:是指一个字符占用一个标准的字符的位置,通常的英文,数字,符号都是半角的,半角通常的显示码通常都是一个字节。

注意:全角空格为12288,半角空格为32

半角字符的取值:33-126

全角字符的取值:65281-65373

全角与半角的对应关系是:均相差65248

下面是具体的全角字符转换半角字符

View Code
 1     protected void Page_Load(object sender, EventArgs e)
2 {
3 string str = "asdfghj123456678!@#!$@$%";
4 Response.Write("原字符:"+str+"<br/>");
5 Response.Write("半角:"+aToh(str)+ "<br/>");
6 }
7 /// <summary>
8 /// 判断字符是否英文半角字符或标点
9 /// </summary>
10 /// <param name="c">字符</param>
11 /// <returns></returns>
12 public static bool IsHalfChar(char c)
13 {
14 int i = (int)c;
15 return i >= 32 && i <= 126;
16 }
17
18 /// <summary>
19 /// 判断字符是否为全角字符或标点
20 /// </summary>
21 /// <param name="s"></param>
22 /// <returns></returns>
23 public static bool IsAllChar(char c)
24 {
25 if (c == '\u3000') return true;
26 int i = (int)c - 65248;
27 if (i < 32) return false;
28 return IsHalfChar((char)i);
29 }
30
31 /// <summary>
32 /// 将输入的所有字符转换成半角字符
33 /// </summary>
34 /// <param name="s"></param>
35 /// <returns></returns>
36 public static string aToh(string s)
37 {
38 if (string.IsNullOrEmpty(s)) return s;
39 StringBuilder sbStr = new StringBuilder(s.Length);
40 for (int i = 0; i < s.Length; i++)
41 {
42 if (s[i] == '\u3000')
43 sbStr.Append('\u0020');
44 else if (IsAllChar(s[i]))
45 sbStr.Append((char)((int)s[i] - 65248));
46 else
47 sbStr.Append(s[i]);
48 }
49 return sbStr.ToString();
50 }

 

posted @ 2012-03-06 16:18  That's me  阅读(509)  评论(0编辑  收藏  举报