赞
踩
ASCII编码的介绍
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中储存时也要使用二进制来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示 .
美国信息交换标准代码是由美国国家标准学会(American National Standard Institute , ANSI )制定的,是一种标准的单字节字符编码方案,用于基于文本的数据.它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,后来它已被国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母 .
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言.它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646.ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符.
ASCIl码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符 。
其中:0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响 。
32~126(共95个)是字符 (32是空格),其中48~57为0到9十个阿拉伯数字。
65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
同时还要注意,在标准ASCII中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。
后128个称为扩展ASCII码。许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。
ASCII大小比较规则:
(1) 数字0~9比字母要小.如”7”<”F”;
(2) 数字0比数字9要小,并按照0~9顺序递增.如”3”<”8”;
(3) 字母A比字母Z要小,并按照A~Z顺序递增.如”A”<”Z”;
(4) 同字母的大写字母比小写字母要小32.如”A”<”a”.
几个常见字母ASCLL码大小:”A”为65;”a”为97;”0”为48;”换行LF”为”0x0A”;”回车CR”为”0xCD”;空格为”0x20”.
另外还有128-255的ASCII字符查询ASCII技巧方便查询ASCII码对应的字符:新建一个文本文档,按住ALT+要查询的码值(注意,这里是十进制),松开即可显示出对应字符.例如:按住ALT+97,则会显示出’a’.
字符集简史: 6000年前象形文字,3000年前字母表, 1838年到1854年Samuel F.B. Morse发明了电报,字母表中的每个字符对应于一系列短的和长的脉冲1821年到1824年Louis Braille发明盲文,6位代码,它把字符、常用字母组合、常用单字和标点进行编码。一个特殊的escape代码表示后续的字符代码应解释为大写。一个特殊的shift代码允许后续代码被解释为数字。1931年CCITT标准化Telex代码,包括Baudot #2的代码,都是包括字符和数字的5位代码。1990年早期计算机的字符码是从Hollerith卡片,6位字符码系统BCDIC (Binary-Coded Decimallnterchange Code:二进制编码十进制交换编码)60年代扩展为8位EBCDIC,IBM大型主机的标准1967年美国信息交换标准码(ASCll: AmericanStandard Code for Information lnterchange)在字符长度是6位、7位还是8位的问题上产生了很大的争议。从可靠性的观点来看不应使用替换字符,因此ASCIl不能是6位编码,但由于费用的原因也排除了8位版本的方案(当时每位的储存空间成本仍很昂贵)。这样,最终的字符码就有26个小写字母、26个大写字母、10个数字、32个符号、33个句柄和一个空格,总共128个字符码。ASCII现在记录在ANSIX3.4-1986字符集–用于信息交换的7位美国国家标准码(7-Bit ASCll: 7-BitAmerican National Standard Code for lnformation Interchange) ,由美国国家标准协会(American National Standards lnstitute)发布。
ASCII码的算法:
A在ascii中定义为01000001,也就是十进制65,有这个标准后,当我们输入A时,计算机就可以通过ascii码知道输入的字符的二进制编码是01000001. 而没有这样的标准,我们就必须自己想办法告诉计算机我们输入了一个A;没有这样的标准,我们在别的机器上就需要重新编码以告诉计算机我们要输入A。asci码指的不是十进制,是二进制。只是用十进制表示习惯一点罢了,比如在asci码中, A的二进制编码为1000001,如果用十进制表示是65, 用十六进制表示就是41. 在scii码表中,只包括了一些字符、数字、标点符号的信息表示,这主要是因为计算机是美国发明的,在英文下面,我们使用ascii表示就足够了!但是在汉字输入下面,用ASCII码就不能表示了,而汉字只是中国的通用表示,所以如果我们要在计算机中输入汉字就必须有一个像ASCII码的标准来表示每一个汉字,这就是中国的汉字国标码,它定义了汉字在计算机中的一个标准.通过这个标准,当我们输入汉字时,我们的输入码就转换为区位码,通过唯一的区位码得到这个汉字的字形码并显现出来.当然汉字的区位码在计算机中也是用二进制表示的. 学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低7位表示,031是控制字符如换行回车删除等;32126 是打印字符,可以通过键盘输入并且能够显示出来.
ASCII编码的分析
英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的.比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示.于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号.比如,法语中的é的编码为130(二进制10000010).这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号.
但是,这里又出现了新的问题.不同的国家有不同的字母.因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样.比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号.但是不管怎样,所有这些编码方式中,0–127表示的符号是一样的,不一样的只是128–255的这一段.
至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右.一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号.比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号.
中文编码的问题需要专文讨论,这篇文章不涉及.这里只指出,虽然都是用多个字节表示一个符号,但是GB类的汉字编码与后文的Unicode和UTF-8是毫无关系的.
现在常用编码方式主要有三种:ASCII编码,Unicode编码,UTF-8编码.其中ASCII编码的大小是一个字节,Unicode的大小是两个字节(生僻字是四个字节),UTF-8的大小是16个字节,英文字母1个字节,汉字3个字节,生僻字46个字节;且ASCII编码只支持英文,Unicode编码和UTF-8编码都支持所有语言.
最早只有127个字母被编码到计算机里也,就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122.但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去.
你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码.因此,Unicode应运而生.Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了. Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节).现代操作系统和大多数编程语言都直接支持Unicode.
新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了.但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算.
所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码.UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节.如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间.
UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。