编码是指对输入到计算机中的各种非数值型数据用二进制数进行编码的方式。对于不同机器、不同类型的数据其编码方式是不同的,编码的方法也很多。为了使信息的表示、交换、存储或加工处理的方便,在计算机系统中通常采用统一的编码方式,因此制定了编码的国家标准或国际标准。在输入过程中,系统自动将用户输入的各种数据按编码的类型转换成相应的二进制形式存入计算机存储单元中。在输出过程中,再由系统自动将二进制编码数据转换成用户可以识别的数据格式输出给用户。
, |: [; y" ]2 j" E$ w
% n5 r" C* P' t3 X! t& R: n 二-十进制编码
6 R" \8 P6 T$ n8 `. P3 J$ |) q0 q4 a3 W
在计算机中,对数字的输入和输出是用十进制数进行,而在计算机内部十进制数要用二进制编码来表示,即?quot;0"和"1"的不同组合形式来表示一个十进制数。凡采用若干位二进制数码表示一位十进制数的编码,统称为二进制编码的十进制数,也就是BCD码(Binary Coded Decimal),简称二-十进制编码。
' d/ |) V: @' S) a& g; S% Y
二-十进制编码的方法很多,8421码是最常用的一种,它采用4位二进制数表示1位十进制数,即每一位十进制数用四位二进制编码来表示。这4位二进制数各位权由高到低分别是23、22、21、20,即8、4、2、1。
$ n2 T/ v& }; u7 l# j' t# h例如,十进制数7985的8421码为0111100110000101,如下图所示。
( \) d Y' G, ]# U+ v" ?$ b2 ]3 Z " d; y7 B- r3 p1 s
$ `; L$ F2 a6 F3 e- V
9 [9 `# f" b5 Z5 X' J$ F* [) }ASCII 码
: [- `# c+ u) g. t5 I, P7 z+ [
0 {7 B8 r0 O2 r( h; y 字符是计算机中使用最多的非数值型数据,是人与计算机进行通信、交互的重要媒介,通常使用ASCII 码或EBCDIC码。ASCII(American Standard Code for formation Interchange)码是美国标准信息交换码,已被国际标准化组织定为国际标准,是目前最普遍使用的字符编码,ASCII码有7位码和8位码两种形式。
& g: t9 D3 }$ [) Q# Y0 d' j; [ 因为1位二进制数可以表示两种状态,0或1(21 = 2);2位二进制数可以表示4种状态,00、01、10、11(22 = 4);依次类推,7位二进制数可以表示27=128种状态,每种状态都唯一对应一个7位的二进制码,对应一个字符,这些码可以排列成一个十进制序号0~127。所以,7位ASCII码是用七位二进制数进行编码的,可以表示128个字符。
- i( U7 p6 w! G6 p0 {/ P" p
· 第0~32号及127号(共34个)为控制字符,主要包括换行、回车等功能字符;
0 t/ c/ W8 ^2 Q7 o& E+ m: U · 第33~126号(共94个)为字符,其中第48~57号为0~9十个数字符号,65~90号为 26个英文大写字母,97~122号为26个小写字母,其余为一些标点符号、运算符号等。
! Z$ O$ j- s r 例如,大写字母A的 ASCII码值为1000001,即十进制数65,小写字母a的 ASCII码值为1100001,即十进制数97。
" U$ x1 m: \* F 注意:在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定,正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1来满足;偶校验规定,正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1来满足。
/ ]. E" j! S S9 {+ X+ K8 ^汉字编码
u3 ^4 X' e! ]$ R
计算机在处理汉字信息时也要将其转化为二进制代码,这就需要对汉字进行编码。
5 n* m. P6 x) j9 u
. R, ~$ `7 A4 L4 A% O3 C, a% |3 x8 F
· 国标码
$ j, {5 g$ i$ s: {6 T F) d5 s
0 }4 g; h3 h* p* h# E 计算机处理汉字所用的编码标准是我国于1980年颁布的国家标准GB 2312-80,即《中华人民共和国国家标准信息交换汉字编码》,简称国标码。国标码的主要用途是作为汉字信息交换码使用。
9 Y# [# U- N& \8 P: Y m' r5 m2 s! b 国标码与ASCII码属同一制式,可以认为它是扩展的ASCII码。在7位ASCII码中可以表示128个信息,其中字符代码有94个。国标码是以94个字符代码为基础,其中任何两个代码组成一个汉字交换码,即由两个字节表示一个汉字字符。第一个字节称为"区",第二个字节称为"位"。这样,该字符集共有94个区,每个区有94个位,最多可以组成94×94=8836个字。
6 z/ [; Y8 v/ ~8 v4 y 在国标码表中,共收录了一、二级汉字和图形符号7445个。其中图形符号682个,分布在1~15区;一级汉字(常用汉字)3755个,按汉语拼音字母顺序排列,分布在16~55区;二级汉字(不常用汉字)3008个,按偏旁部首排列,分布在56~87区;88区以后为空白区,以待扩展。
! D0 ?- E, A( a9 { 国标码本身也是一种汉字输入码,由区号和位号共4位十进制数组成,通常称为区位码输入法。在区位码中,两位区号在高位,两位位号在低位。区位码可以唯一确定一个汉字或字符,反之任何一个汉字或字符都对应唯一的区位码。例如,汉字"啊"的区位码是"1601",即在16区的第01位;符号"。"的区位码是"0103"。其"1601"和"0103"是十六进制数。
& m3 {. e# D! s) t, B
区位码最大的特点就是没有重码,虽然不是一种常用的输入方式,但对于其他输入方法难以找到的汉字,通过区位码却很容易得到,但需要一张区位码表与之对应。例如,汉字"丰"的区位码是"2365"。
/ b0 Y9 @- I$ h" O4 r, l0 f+ ]& A! t
· 机内码
- _) I6 w# D0 ]! g
, o9 _* H% \7 A
机内码是指在计算机中表示一个汉字的编码。正是由于机内码的存在,输入汉字时就允许用户根据自己的习惯使用不同的汉字输入码,例如,拼音、五笔、自然、区位等,进入系统后再统一转换成机内码存储。国标码也属于一种机器内部编码,其主要用途是将不同的系统使用的不同编码统一转换成国标码,使不同系统之间的汉字信息进行相互交换。
; S4 L" h( W2 h* s
机内码一般都采用变形的国标码。所谓变形的国标码是国标码的另一种表示形式,即将每个字节的最高位置1。这种形式避免了国标码与ASCII码的二义性,通过最高位来区别是ASCII码字符还是汉字字符,如下表所示。
! X2 M) @ r) S; W0 |& d V
' k, e, \. F: C4 n; I- I; r% F9 {, b
b7b6b5b4b3b2b1b0b7b6b5b4b3b2b1b0
" d# i; y! v5 P5 g" F2 a( f
1×××××××1×××××××
" K/ E- E4 ^* l g 注意:因为汉字的区码和位码的范围都在01~94内,所以不直接用区位码作为计算机内码,否则会与基本的ASCII码发生冲突。