1.ASCII字符--美国信息交换标准码 (0-127),每个字符用7位二进制数表示,字节首位为0.因此,小于80H(128)的均为ASCII符。英文26个字符用一个字节的7位二进制数足以表示。; N& \/ A, w- {3 }8 U3 ~) B
2.以gb2312为例,中文汉字共有约七千字,不能用一个字节表示全部的汉字,因此用两个字节来表示一个汉字,为避免与英文字符有重码,每个字节的最高位置1,作为标志位。1 M1 ?& t9 f2 b1 T. C- N
3.ASCII分为常用字符(可供打印的字符)与非常用字符(回车、EOF等),常用字符从33(0x21H)号到126(0x7EH)号,共94个字符,汉字就在此范围内编码,因此,中国标准编码的编码范围 :0x21H~0x7EH.两个字节可表示的汉字数为:94×94=8836.
/ n, }* w ~7 U4 u' }! T; l4 x( F+ t. n* R% e; |
以上所述编码即国际码
& k& P& x; M8 O; T( J4 p. B J& R* j4 d% I& X$ p4 J
4.由于每个字节的第一个位被置 1, 所以要在原编码(国际码)之上加 0x80H(10000000). 所以汉字的编码范围为 :0xA1H~0xFEH,在PC机中表现为机内码.
0 |) }$ b/ ^' L6 L& p, o/ _ 5.区位码
2 P6 c* k1 o8 @1 _ 在PC机中,汉字是以机内码形式存储的,每个汉字用两个字节表示,第一个字节用于表示区码,从0xA1H开始为第一区;第二字节用于表示位码,从0xA1H开始为第一位。- ~/ Q1 ^8 C5 K" T: ^
我们平时所说的汉字区位码,一般用十进制表示,共分94个区,每区94个汉字(位):$ X7 @4 L6 h& x
# }! D6 [; J" C- o. s
01-09区 特殊字符区
& P- z. F2 `% k: z% A& w: ^& @ 10-55区 一级汉字区7 x5 t m9 J' B( w7 y; W
56-87区 二级汉字区2 p4 U& u7 }4 G s. O% y: x0 {* T' H
+ k; L" l0 C" R I3 t: C0 ^ V, M2 } 在汉字字库中:
. o; O6 f2 q% f, ?" S: G7 t4 o z ~) v) S9 V3 e! ^
区码=机内码第一字节-0xA0H) J5 a0 \+ m, i1 F
位码=机内码第二字节-0xA0H
; h6 X/ w) K9 i$ X! S! l" y
6 e# D0 y" t" T! R8 B9 X! ? 6.国际码 区位码 机内码 之间的关系:! d- r! n6 p" j5 }2 k' a( `
, w$ K! s0 z1 X/ A7 S' J 机内码=国际码+8080H
! |, s) a6 P5 ]/ {+ f% z1 z/ U/ y) u2 P: l
区位码=机内码-0xA0H- {# @! _& j& ~ N
0 B4 B$ V4 p$ G# r, w7 l, L 国际码=区位码+2020H
, a" ~$ w& f7 y; C6 ~7 H0 c' k) ]* W
# j) ^2 h4 {, I5 O* ^" B* U2 m 如:“陈”的汉字区位码:1934(16进制为 1322H)
% e$ O) R H" N( Q5 m 在Linux下,用文本编辑器输入"陈",保存为test
7 o% q/ T1 N* }8 z od -h test: ?$ t2 A; h; B8 V5 g8 O
显示为:
- {: o0 d2 s2 T1 K( I 0000000 c2b3 000a
" v& _5 ]; |# O" V* H& N 0000003
) t/ G+ j# G# i% i
' t( {9 P! |$ z- y 区码=b3-a0=13, n9 g9 N& N) _& r( H
位码=c2-a0=22 |