1.ASCII字符--美国信息交换标准码 (0-127),每个字符用7位二进制数表示,字节首位为0.因此,小于80H(128)的均为ASCII符。英文26个字符用一个字节的7位二进制数足以表示。
1 ]7 k, ^: b8 l# l7 S 2.以gb2312为例,中文汉字共有约七千字,不能用一个字节表示全部的汉字,因此用两个字节来表示一个汉字,为避免与英文字符有重码,每个字节的最高位置1,作为标志位。
2 D4 n3 V* Y0 ` 3.ASCII分为常用字符(可供打印的字符)与非常用字符(回车、EOF等),常用字符从33(0x21H)号到126(0x7EH)号,共94个字符,汉字就在此范围内编码,因此,中国标准编码的编码范围 :0x21H~0x7EH.两个字节可表示的汉字数为:94×94=8836.9 z2 [' [% B$ b' Z1 p. A2 k3 }" ]
7 V. t; D2 c0 p9 `" z: \! y 以上所述编码即国际码
8 A# u# m6 d$ ?
9 p$ ^7 f, N: X* [5 X0 K6 v 4.由于每个字节的第一个位被置 1, 所以要在原编码(国际码)之上加 0x80H(10000000). 所以汉字的编码范围为 :0xA1H~0xFEH,在PC机中表现为机内码.
, }3 g) a9 h1 O8 ~$ M8 g: L 5.区位码
5 x* x# D7 @2 i. |9 m s 在PC机中,汉字是以机内码形式存储的,每个汉字用两个字节表示,第一个字节用于表示区码,从0xA1H开始为第一区;第二字节用于表示位码,从0xA1H开始为第一位。
; H& \* j! [+ N5 G 我们平时所说的汉字区位码,一般用十进制表示,共分94个区,每区94个汉字(位):
$ A- O& p$ c0 M% f( z7 x
' F) ~* U4 Q5 _) |" j2 b 01-09区 特殊字符区8 X, ^* I% H2 m9 ?6 E4 f% n8 y
10-55区 一级汉字区
" s9 b9 H2 y" I 56-87区 二级汉字区4 S8 k. s5 U' S; s( P$ n$ C4 {; ]9 D
1 f3 w' c& i1 i; V6 y 在汉字字库中:1 }2 @2 D+ z; z& o, ]2 z6 u
+ U8 l- R7 {- ] ?, f
区码=机内码第一字节-0xA0H9 n4 \8 x a: |, N
位码=机内码第二字节-0xA0H4 {1 r# s9 A5 b& |
* W, s) B6 M/ n2 w, g+ Q
6.国际码 区位码 机内码 之间的关系:
( `5 Z6 Y. N& j! Q" B+ N8 \7 c4 ^- Y: A9 h/ t* e7 l/ R& n
机内码=国际码+8080H
8 P7 f: M0 X/ r: C k% E5 l2 v7 [ G$ r
区位码=机内码-0xA0H
" ?3 n. Z# {' [) h
% I, W" i, y& E. O' n* m 国际码=区位码+2020H+ J+ G) V7 Y8 r q/ m
" @ L& A) d, a4 A. ~+ k m 如:“陈”的汉字区位码:1934(16进制为 1322H)* X' B; B0 n$ C- j3 w% Q
在Linux下,用文本编辑器输入"陈",保存为test
: D1 H6 _! }$ w U* f3 L od -h test) m! Y r, X( ]! I% |
显示为:2 i) Z t# r! i, Y* g7 t+ I' s
0000000 c2b3 000a
* F1 ?1 Q$ Y, E7 h 0000003( u9 q' ?% F$ G
; l. u' Y; i8 Q! a3 [* P" e 区码=b3-a0=13( w$ B) \! j9 s6 {, j
位码=c2-a0=22 |