1.ASCII字符--美国信息交换标准码 (0-127),每个字符用7位二进制数表示,字节首位为0.因此,小于80H(128)的均为ASCII符。英文26个字符用一个字节的7位二进制数足以表示。% N$ m* ]1 ~, {- y
2.以gb2312为例,中文汉字共有约七千字,不能用一个字节表示全部的汉字,因此用两个字节来表示一个汉字,为避免与英文字符有重码,每个字节的最高位置1,作为标志位。9 ?' ^ e- u' y) i* ^$ V* c
3.ASCII分为常用字符(可供打印的字符)与非常用字符(回车、EOF等),常用字符从33(0x21H)号到126(0x7EH)号,共94个字符,汉字就在此范围内编码,因此,中国标准编码的编码范围 :0x21H~0x7EH.两个字节可表示的汉字数为:94×94=8836.$ M. Z/ `+ J. U' W! p: ^
4 n1 p4 R, E& b7 Q. w* e4 s
以上所述编码即国际码
5 p0 b% @* v. K
9 {. o; ]; O7 o/ |5 @( Q+ I 4.由于每个字节的第一个位被置 1, 所以要在原编码(国际码)之上加 0x80H(10000000). 所以汉字的编码范围为 :0xA1H~0xFEH,在PC机中表现为机内码.6 ]8 r* p" O& u
5.区位码+ n, c) P$ P: c! Q. |6 N( D
在PC机中,汉字是以机内码形式存储的,每个汉字用两个字节表示,第一个字节用于表示区码,从0xA1H开始为第一区;第二字节用于表示位码,从0xA1H开始为第一位。
. X7 H: J5 g- z) V' _ [ 我们平时所说的汉字区位码,一般用十进制表示,共分94个区,每区94个汉字(位):% A4 T' \# y0 O0 R- V# a
' ]# e3 B8 I- y, K- v0 j
01-09区 特殊字符区
& h4 a8 q" }& j, b/ B$ I8 L2 v @( \ 10-55区 一级汉字区
4 T7 p) M9 R* F; k: C 56-87区 二级汉字区
, F& z2 j- u) Y) D( H 1 k' p) Y9 R* Q4 b9 ?9 X2 X
在汉字字库中:+ R/ G# k) w j$ T- `: e
) a- w$ A0 ?+ \! B, [, T2 j 区码=机内码第一字节-0xA0H
; f2 n& X. R4 v7 R 位码=机内码第二字节-0xA0H) ]4 ]8 V& A; H- U
6 I* Z7 E' G! b" `' G 6.国际码 区位码 机内码 之间的关系:% p( A/ t7 }! l3 o# ^$ @$ Q/ j, O
" a) _* X8 H4 V2 w) O- |# K; i, B
机内码=国际码+8080H+ Y4 h$ C- U& c3 p
/ S9 C, J+ a# i: A7 i6 ]
区位码=机内码-0xA0H4 ?% q5 t9 Q g* l9 M& L A& T
3 G) l- y; ?) ^6 M, V/ \4 V1 v 国际码=区位码+2020H3 {7 J" S7 g. p
8 F5 j- J2 y' R0 ^" [
如:“陈”的汉字区位码:1934(16进制为 1322H)
' d& \/ a2 o3 g, K. ?# A 在Linux下,用文本编辑器输入"陈",保存为test: `' p! R0 n$ m$ A( Q
od -h test' K+ e5 C" A, e: }( k% J9 V
显示为:& O6 }* P! |" ^/ u7 R' j% B9 f
0000000 c2b3 000a
7 G5 ?4 ^& t6 K$ i, U) n2 v 0000003) W5 U) J' ]9 H& `
8 t+ t2 a9 h( ^; M1 [
区码=b3-a0=13
: w# E& [3 _" Y" ~( { 位码=c2-a0=22 |