本内容摘自《汉字编码问题》一文
五、如何判断一个汉字是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