简单人生
幻想指点江山,梦中激扬文字

本内容摘自《汉字编码问题》一文
五、如何判断一个汉字是big5或是gb
 
 大陆电脑中的汉字多以GB2312标准进行编码,简称GB码或国标码,共定义6763汉字,编码如下:
 第一字节,行码0xA1-0xFE,第二节字,列码0xA1-0xFE,每行94个汉字。其中,1-15行(A1-AF)全角字母、符号;16-55行(B0-CF)以拼音为序的一级汉字3755字;56-87行(D0-F7)以部首为序的二级汉字3008字。例如:GB码16行1列表示“啊”字,编码为0xB0A1。
 港台电脑中的汉字则多以BIG5编码,共定义了13053汉字,汉字部分均以部首为序,编码如下:
 第一节字,行码0xA1-0xFE,第二节字,列码0x40-0x7E,0xA1-0xFE,每行157个汉字;其中,1-3/38-40行(A1-A3,C6-C8)全角字母、符号,4-39行(A4-C6)一级汉字5401字,41-89行(C9-F9)二级汉字7652字。例如:BIG5码16行121列同样表示“啊”字,编码为0xB0DA。
 GBK又称GB扩展编码或GB13000,就是这样的一个汉字编码,它是是在兼容GB码的基础上,将GB码中不存在的ISO10646.1汉字,按Unicode编码顺序进行重新编码。其编码空间包含几个子集,其中GBK/2就是GB码汉字;各子集的编码情况见下表。
 子集编码范围编码空间编码字数
 GBK/10xA1A1-0xA9FE846717
 GBK/20xB0A1-0xF7FE6,7686,763
 GBK/30x8140-0xA0FE6,0806,080
 GBK/40xAA40-0xFEA08,1608,160
 GBK/50xA840-0xA9A0192166
 EUDC/10xAAA1-0xAFFE564用户定义1
 EUDC/20xF8A1-0xFEFE658用户定义2
 EUDC/30xA140-0xA7A0672用户定义3
 
 一般是这样辨别的:
 1、GBcode的内码的两个字节都是从A0H-FEH之间的;
 2、BIGcode的内码的第一个字节是80H-FFH,第二个字节是00H-FFH;
 你要浏览全文,看看是否有第二个字节是小于7FH的汉字,如果有的话,一般是BIGcode的。当然也有特殊情况,不过非常少见的。

判断一段文字中是否含有BIG5码汉字,可用做内码的自动识别
返回True表示包含BIG5码
返回False表示不含BIG5码,这段文字一般可认为是GB码

FunctionCheckBIG(strSourceAsString)AsBoolean
Dim  idx  As   Long
Dim   Byte  Temp()  As   Byte
    CheckBIG 
=   False
    
For  idx  =   1   To   Len (strSource)
    ByteTemp
= StrConv( Mid (strSource,idx, 1 ),vbFromUnicode)
       
If   UBound (ByteTemp) > 0   Then
          
If  ByteTemp( 1 ) >= 64   And  ByteTemp( 1 ) <= 126   Then
          CheckBIG
= True
    ExitFor 
EndIf
EndIf
Next
EndFunction



参考:
http://www.china-askpro.com/msg6/qa41.shtml
http://www.clyrics.com/stonec/hanzi/gbngbk.htm
http://www.6to23.com/s11/s11d3/200191010412.htm
http://www.khngai.com/chinese/charmap/tblgbmain.php?page=0

posted on 2006-08-03 09:35 简单人生 阅读(1074) 评论(1)  编辑 收藏 引用
只有注册用户登录后才能发表评论。