HOWTO: 判断全角和半角

ASCII码大于255,则为双字节?

另外查看MSDN中KeyPress事件

1,FCL

System.Text.UnicodeEncoding.Unicode.GetByteCoun(str)

试验无效。全部返回2,又试验ASCIIEncoding.ASCII类的同名方法,全部返回1

2,Regex

全角:[^\x00-\xff]

3,第三方实现

   1:  #region 半全角互换
   2:  /// <summary>
   3:  /// 转全角的函数(SBC case)
   4:  /// </summary>
   5:  /// <param name="input">任意字符串</param>
   6:  /// <returns>全角字符串</returns>
   7:  ///<remarks>
   8:  ///全角空格为12288,半角空格为32

9: ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248

  10:  ///</remarks>        
  11:  public static string ToSBC(string input)
  12:  {
  13:      //半角转全角:
  14:      char[] c = input.ToCharArray();
  15:      for (int i = 0; i < c.Length; i++)
  16:      {
  17:          if (c[i] == 32)
  18:          {
  19:              c[i] = (char)12288;
  20:              continue;
  21:          }
  22:          if (c[i] < 127 && c[i] > 32)
  23:          {
  24:              c[i] = (char)(c[i] + 65248);
  25:          }
  26:      }
  27:      return new string(c);
  28:  }
  29:   
  30:  /// <summary>
  31:  /// 转半角的函数(DBC case)
  32:  /// </summary>
  33:  /// <param name="input">任意字符串</param>
  34:  /// <returns>半角字符串</returns>
  35:  ///<remarks>
  36:  ///全角空格为12288,半角空格为32(此处不必转空格)

37: ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248

  38:  ///</remarks>
  39:  public static string ToDBC(string input)
  40:  {
  41:      char[] c = input.ToCharArray();
  42:      for (int i = 0; i < c.Length; i++)
  43:      {
  44:          if (c[i] == 12288)
  45:          {
  46:              c[i] = (char)32;
  47:              continue;
  48:          }
  49:          if (c[i] > 65280 && c[i] < 65375)
  50:          {
  51:              c[i] = (char)(c[i] - 65248);
  52:          }
  53:      }
  54:      return new string(c);
  55:  }
  56:  #endregion
原文地址:https://www.cnblogs.com/yicone/p/580689.html