none
一个判断GB2312中有效种文字困惑. RRS feed

  • 问题

  •   [TestMethod()] //这个函数总是测试通不过.第一个'啊'就不行.郁闷
      public void Test_IsZhongWenZiInGB23121()
      {
    
       string str = "啊齄②ぽφ┣";
    
       Assert.IsTrue(IsZhongWenZiInGB2312(str[0]));
    
       Assert.IsFalse(IsZhongWenZiInGB2312(str[1]));
       Assert.IsFalse(IsZhongWenZiInGB2312(str[2]));
    
      }//Test_IsZhongWenZiInGB23121()
    
    ==========================
      /// <summary>
      /// 判断某一个编码是否是GB2312中的中文字。
      /// </summary>
      /// <param name="_Zi"></param>
      /// <returns></returns>
      public static bool IsZhongWenZiInGB2312( UInt16 _Zi )
      {
         UInt16 HighByte =Convert.ToUInt16( (_Zi & Convert.ToUInt16(0xFF00)) >> 8);//高位字节
        UInt16 LowByte = Convert.ToUInt16(0x00FF);
         if ( HighByte>=176 && HighByte<=247 
           && LowByte>=160 && LowByte<=254)
           return true;
         else 
           return false;
    
      }//IsZhongWenZiInGB2312( UInt16 _Zi )
    
    
    
    

    信奎爷,无所畏惧!!
    2011年5月17日 5:47

答案

  • 你好:)

    更为简单的方法:

      public static bool IsZhongWenZiInGB2312(string word)
            {
                byte[]bytes = Encoding.GetEncoding("gb2312").GetBytes(word);
                byte highbyte = bytes[0];
                byte lowbyte=bytes[1];
                if (highbyte >= 176 && highbyte <= 247
                  && lowbyte >= 160 && lowbyte <= 254)
                    return true;
                else
                    return false;

            }

    static void Main(string[] Args)
            {

                string str = "啊齄②ぽφ┣";

                Console.WriteLine(IsZhongWenZiInGB2312(str[0]+""));
            }


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年5月17日 6:34
    版主
  • 太感谢了! 原来还可以这么方便地直接获取高低位字节呀...呵呵

    另外我在调试的时候发现, GB2312通过C#读取得值与编码表中的理论值不符. 不知道是怎么回事.

    您能再帮我看看吗? 谢谢.  我开了一个新问题: http://social.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/a762a16c-f3eb-491d-a2fd-75cc5fdfc19a


    信奎爷,无所畏惧!!
    2011年5月18日 1:51

全部回复

  • 你好:)

    更为简单的方法:

      public static bool IsZhongWenZiInGB2312(string word)
            {
                byte[]bytes = Encoding.GetEncoding("gb2312").GetBytes(word);
                byte highbyte = bytes[0];
                byte lowbyte=bytes[1];
                if (highbyte >= 176 && highbyte <= 247
                  && lowbyte >= 160 && lowbyte <= 254)
                    return true;
                else
                    return false;

            }

    static void Main(string[] Args)
            {

                string str = "啊齄②ぽφ┣";

                Console.WriteLine(IsZhongWenZiInGB2312(str[0]+""));
            }


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年5月17日 6:34
    版主
  • 太感谢了! 原来还可以这么方便地直接获取高低位字节呀...呵呵

    另外我在调试的时候发现, GB2312通过C#读取得值与编码表中的理论值不符. 不知道是怎么回事.

    您能再帮我看看吗? 谢谢.  我开了一个新问题: http://social.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/a762a16c-f3eb-491d-a2fd-75cc5fdfc19a


    信奎爷,无所畏惧!!
    2011年5月18日 1:51
  • 试试直接判断,中文字符的范围:0x4e00~0x9fff
    
    public static bool IsZhongWenZiInGB2312( UInt16 _Zi )
    {
      return _Zi>=0x4e00 && _Zi <=0x9fff;
    }
    


    2011 c# mvp China. *George读起来像不像“饺子”?我爱吃饺子,我叫George。
    2011年5月18日 1:52
    版主