判断字符是否是GB2312-80的汉字。

简介:   首先,先介绍GB2312-80编码。参看文章“GB2312编码”。以下内容来自那篇文章。   GB2312或GB2312-80是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集--基本集》,由中国国家标准总局发布,1981年5月1日实施。

  首先,先介绍GB2312-80编码。参看文章“GB2312编码”。以下内容来自那篇文章。

  GB2312或GB2312-80是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集--基本集》,由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于大陆;新加坡等地也采用此编码。几乎所有的中文系统和国际化的软件都支持GB2312。

  GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄罗斯语西里尔字母在内的682个全形字符。

  GB2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖99.75%的使用频率。

  对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB18030汉字字符集的出现。

分区表示
  GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。

    01-09区为特殊符号。
    16-55区为一级汉字,按拼音排序。
    56-87区为二级汉字,按部首/笔画排序。
    10-15区及88-94区则未有编码。

    举例来说,“啊”字是GB2312之中的第一个汉字,它的区位码就是1601。

  字节结构
  在使用GB2312的程序中,通常采用EUC储存方法,以便兼容于ASCII。

  每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”,第二个字节称为“低位字节”。“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)。例如“啊”字在大多数程序中,会以0xB0A1储存。(与区位码对比:0xB0=0xA0+16,0xA1=0xA0+1)。

  在实际的运用中,有时会要求判断一个中文字符是否是GB2312中的中文字符。

  在VB2005中,tB = System.Text.Encoding.GetEncoding("gb18030").GetBytes(S),表示将字符S的内码放到tB这个字节数组里。其中gb18030是向下兼容gb2312。

  于是,编写了一个函数,用来判断字符是否是gb2312的中文字符。用的是VB2005。代码格式修正于2012年1月6日。

  

Public Function IsGB2312( ByVal S As String) As Boolean
   If S Is Nothing Then Return False
   If S = "" Then Return False
   If S.Length > 1 Then S = S.Substring(0, 1)
   Dim tB() As Byte
   Try
    tB = System.Text.Encoding.GetEncoding( "gb18030").GetBytes(S)
     If tB.Length = 2 Then
       If tB(0) >= 176 AndAlso tB(0) <= 247 AndAlso tB(1) >= 161  AndAlso tB(1) <= 254 Then
         If tB(0) = 215 AndAlso tB(1) > 249 Then
           Return False
         Else
           Return True
         End If
       Else
         Return False
       End If
     Else
       Return False
     End If
   Catch
     Return False
   End Try
End Function

   注:在VB2005中,ASC函数也能返回字符的内码,不过返回值是Integer型的。而且由于和早期的VB版本兼容,返回值还进行了一定的处理。早期的VB中Integer用的是2个字节,那么,汉字的内码也是两个字节,这两个字节组成一个Integer型的变量,由于第一个字节的最高位一定是1,所以,早期的VB的汉字的内码是一个小于0的整数。而VB2005的Integer型的变量是4个字节。汉字的内码是两个字节,转到Integer型,填充到后面两个字节,前面两个字节用0填充,这样一来,VB2005的汉字内码应该是一个正数,但为了和早期的兼容,VB2005做了一定的处理,用了一个公式256X+Y-65536来计算汉字的内码,其中X是内码的第一个字节,Y是内码的第二个字节。

 

 

相关文章
|
2月前
ASCII编码字符数量
ASCII编码字符数量
49 2
有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
256 0
|
Java Android开发
Java中英文字母汉字混合字符长度值计算
Java中英文字母汉字混合字符长度值计算 String string = "phil安卓"; Logger.
2877 0
|
存储
字符与字节有什么区别呢?
1、计算机存储信息的最小单位,称之为位(bit),音译为比特,二进制的一个“0”或一个“1”叫一位。 2、计算机存储容量基本单位是字节(Byte),音译为拜特,8个二进制位组成1个字节。一般而言:一个标准英文字母占一个字节位置,一个标准汉字占二个字节位置。
3486 0
限制汉字的长度(包括处理英文字母)
  一个汉字的长度等于两个英文字母的长度。   所以在限制字符串长度的时候,需要将两者的类型转换成一致,处理方法如下:       /** 字符串截取 参数 str 字符串 len 长度。
1156 0
常用字符与ASCII代码对照表
常用字符与ASCII代码对照表 为了便于查询,以下列出ASCII码表:第128~255号为扩展字符(不常用)   ASCII码 键盘 ASCII 码 键盘 ASCII 码 键盘 ASCII 码 键盘 27 ESC 32 SPACE ...
1113 0