C# 全角半角字符互转

你在用C#编程的时候,是否遇到过《全角半角字符互转》的情况?

比如:你的前端页面有个框框,让用户输入模糊查找的名字。如果用户输入时中包含有全角字符,而你的DB中存的是半角字符。这个时候直接查DB是【可以】匹配到的。

SQL中不区分全角半角(我用SQL server测试的,其他DB不清楚)。

就算你在用SQL server(SQL查询不区分全角半角),如果你把值从DB取到程序内存以后,再用equals(),contains()等string 函数去处理的时候,就区分全角半角了。

这里提供全角半角互转的函数:

 

 1         /// <summary>
 2         /// 全角空格为12288,半角空格为32
 3         /// 其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
 4         /// </summary>
 5         /// <param name="input">任意字符串</param>
 6         /// <returns>全角字符串</returns>
 7         public static String ToSBC(String input)
 8         {
 9             // 半角转全角:
10             char[] c = input.ToCharArray();
11             for (int i = 0; i < c.Length; i++)
12             {
13                 if (c[i] == 32)
14                 {
15                     c[i] = (char)12288;
16                     continue;
17                 }
18                 if (c[i] < 127)
19                     c[i] = (char)(c[i] + 65248);
20             }
21             return new String(c);
22         }
23 
24         /// <summary>
25         /// 全角空格为12288,半角空格为32
26         /// 其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
27         /// </summary>
28         /// <param name="input">任意字符串</param>
29         /// <returns>半角字符串</returns>
30         public static String ToDBC(String input)
31         {
32             char[] c = input.ToCharArray();
33             for (int i = 0; i < c.Length; i++)
34             {
35                 if (c[i] == 12288)
36                 {
37                     c[i] = (char)32;
38                     continue;
39                 }
40                 if (c[i] > 65280 && c[i] < 65375)
41                     c[i] = (char)(c[i] - 65248);
42             }
43             return new String(c);
44         }

 

posted @ 2014-03-19 10:16  MarkSun  阅读(1006)  评论(0)    收藏  举报