程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> 關於ASP編程 >> 判斷字符是否是GB2312-80的漢字

判斷字符是否是GB2312-80的漢字

編輯:關於ASP編程
 

首先,先介紹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是內碼的第二個字節。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved