1.ASCII字符--美国信息交换标准码 (0-127),每个字符用7位二进制数表示,字节首位为0.因此,小于80H(128)的均为ASCII符。英文26个字符用一个字节的7位二进制数足以表示。
+ m- i0 J: u0 F m7 Q7 R3 y. s6 @ 2.以gb2312为例,中文汉字共有约七千字,不能用一个字节表示全部的汉字,因此用两个字节来表示一个汉字,为避免与英文字符有重码,每个字节的最高位置1,作为标志位。
+ E3 g4 U- e4 R, J 3.ASCII分为常用字符(可供打印的字符)与非常用字符(回车、EOF等),常用字符从33(0x21H)号到126(0x7EH)号,共94个字符,汉字就在此范围内编码,因此,中国标准编码的编码范围 :0x21H~0x7EH.两个字节可表示的汉字数为:94×94=8836.
. l0 ?* l8 |0 g5 e
" V5 j$ Q, u, D0 S- M 以上所述编码即国际码
# {! }$ X! F: ?- G' d; u2 p9 t( P( [# W
7 ~7 h4 t0 k. d* m4 ^4 ` 4.由于每个字节的第一个位被置 1, 所以要在原编码(国际码)之上加 0x80H(10000000). 所以汉字的编码范围为 :0xA1H~0xFEH,在PC机中表现为机内码.! G8 Q" Q# Z4 p& g9 ?
5.区位码* S8 R m& i. h* W( w, _$ E7 x D; S
在PC机中,汉字是以机内码形式存储的,每个汉字用两个字节表示,第一个字节用于表示区码,从0xA1H开始为第一区;第二字节用于表示位码,从0xA1H开始为第一位。$ ]7 F) a3 Q2 Z1 R1 ?, C
我们平时所说的汉字区位码,一般用十进制表示,共分94个区,每区94个汉字(位):( n/ c3 J [5 L0 E: j `
8 q4 k3 e* E( d0 t: S 01-09区 特殊字符区
0 ?- z4 c1 l- X) G- T/ q 10-55区 一级汉字区
2 s$ y. P8 |! I 56-87区 二级汉字区& B6 x0 x7 ^. N
7 C1 F2 |: g7 X2 J+ K 在汉字字库中:- q8 S- v2 ~% h0 I( V- C6 q5 K
4 [7 w: T0 D0 D' k; [; R
区码=机内码第一字节-0xA0H, \+ I; v. s v
位码=机内码第二字节-0xA0H& A) ~+ _; a, y H6 r' A# @7 b
$ T/ h6 q" d; E% L$ _
6.国际码 区位码 机内码 之间的关系:
5 {- ]5 I9 `$ O& ? a# x9 ]7 }! c- j# S0 p6 Y
机内码=国际码+8080H# l4 g% R; d1 R. H8 u. [' W
4 }1 a5 _3 I3 ~7 t2 S' h. a 区位码=机内码-0xA0H
3 c5 _# O: O* J/ w" ]: }, B; L, }$ q/ n+ H t) _+ n9 W3 t
国际码=区位码+2020H7 b5 s o u* E. b
0 R+ O6 P' V, S. q4 C( ?: s. t 如:“陈”的汉字区位码:1934(16进制为 1322H)- G! z- I* [% N9 f: {
在Linux下,用文本编辑器输入"陈",保存为test$ r0 M% p6 c- f Z# o$ E; z
od -h test5 F9 h) a7 j3 q0 q/ o+ H/ Q
显示为:. z( U+ M, S# o6 L
0000000 c2b3 000a
2 j# N" `6 u: s& _/ \4 W* K 0000003: W/ |: g& F" j# [" g/ Z( K
& J- T. q+ X( q/ K' w" N
区码=b3-a0=13' k9 R, K. {) d0 g9 {1 E& V
位码=c2-a0=22 |