1.ASCII字符--美国信息交换标准码 (0-127),每个字符用7位二进制数表示,字节首位为0.因此,小于80H(128)的均为ASCII符。英文26个字符用一个字节的7位二进制数足以表示。
# L2 k9 b# H( ^ 2.以gb2312为例,中文汉字共有约七千字,不能用一个字节表示全部的汉字,因此用两个字节来表示一个汉字,为避免与英文字符有重码,每个字节的最高位置1,作为标志位。
3 f& `$ n8 a- V8 t+ T3 L2 Z; h2 C& Z 3.ASCII分为常用字符(可供打印的字符)与非常用字符(回车、EOF等),常用字符从33(0x21H)号到126(0x7EH)号,共94个字符,汉字就在此范围内编码,因此,中国标准编码的编码范围 :0x21H~0x7EH.两个字节可表示的汉字数为:94×94=8836.3 s) l3 P3 D2 R; H/ n
' e- _/ J$ a2 ~0 P 以上所述编码即国际码9 C) t# \. G9 @: b9 i" c, k
5 W1 i B& x# T! U
4.由于每个字节的第一个位被置 1, 所以要在原编码(国际码)之上加 0x80H(10000000). 所以汉字的编码范围为 :0xA1H~0xFEH,在PC机中表现为机内码.7 v$ x, {, g; [
5.区位码# r; |3 ^6 ?( ?/ s
在PC机中,汉字是以机内码形式存储的,每个汉字用两个字节表示,第一个字节用于表示区码,从0xA1H开始为第一区;第二字节用于表示位码,从0xA1H开始为第一位。
: [ }6 V; N6 G% Y4 u0 } 我们平时所说的汉字区位码,一般用十进制表示,共分94个区,每区94个汉字(位):# g! b1 e3 _4 E+ S' A+ H% d/ t
( ~5 Q% U: O7 w% l 01-09区 特殊字符区
& k/ n* P, z1 q2 [, W 10-55区 一级汉字区
% z% I0 v8 a- c7 K6 S0 B 56-87区 二级汉字区, d1 G2 N7 ?8 V! u7 |
6 x1 t4 t* q4 N1 G* O
在汉字字库中:% r t$ ]* `# f+ q* ]8 b, f# `. h
" }) f: ?! {3 A
区码=机内码第一字节-0xA0H5 n3 J& A: g7 d H% @( K) p
位码=机内码第二字节-0xA0H. z, d/ _' p* x6 ~- M
- A' Y: y# Z, W q" v& t6 R
6.国际码 区位码 机内码 之间的关系:+ K; Y! _4 T5 f: a
+ ?8 V: D- e: m+ Y p0 l9 S0 S 机内码=国际码+8080H4 o+ z- J& U9 W& a. \2 h7 w
' T, U" i/ Q: a 区位码=机内码-0xA0H
, u" V6 x( a3 ^: u" n- h) D# E0 d- c3 Y8 q1 ]
国际码=区位码+2020H2 F, A7 D9 d3 [* g: L9 h
+ I& ]( R8 O+ K4 A
如:“陈”的汉字区位码:1934(16进制为 1322H)2 F! I+ h- ?1 p1 {
在Linux下,用文本编辑器输入"陈",保存为test1 L [% h/ M% I6 R1 k; T3 b& o( K
od -h test
* M/ K$ t$ |" B O# j 显示为:
; X3 y' ]8 r" l 0000000 c2b3 000a
# C" Z. g; b$ u* E& f1 y 0000003
5 X4 A6 @2 ~9 F
# N, h. t2 j5 G' m7 T* y 区码=b3-a0=131 C, L5 u# L+ \# m0 O5 b# o$ r: E: O' L
位码=c2-a0=22 |