编码的概念,常用的几种编码原理和使用区分。
一、计算机编码
计算机编码: 在计算机中,数据都是基于二进制的方式存储。一个二进制位表示一个计算机位,同时用一个字节表示8个位。因此位(bit)、字节(byte)、KB、MB、GB等均是存储空间单位,表示可存储二进制数据。因此编码则表示对于文字、字母、符号如何以二进制的形式存储在计算机中。
我们将文字、字母、符号统称为字符,因此引入计算机编码后可以使用字符与计算机进行交互,而不用使用二进制数据。那么整个过程可以体现为输入字符-->编码成二进制-->计算机存储二进制-->计算机取出二进制进行解码-->展示对应字符,日常使用时编码、解码对用户透明,所以表现为可以使用字符直接与计算机交互。
二、字符集
字符集: 各个国家和不同应用领域使用的字符都是不相同的,因此就产生了各种各样的字符集。所以字符集即多个字符的集合,不同的字符集字符个数也不相同。常见的字符集有ASCII字符集、ISO 8859字符集、GB2312字符集、Unicode字符集等。
ASCII字符集
ASCII即美国信息交换标准代码,基于拉丁字母,主要用于显示现代英语和其他西欧语言,是最通用的信息交换标准。标准的ASCII字符集包括128个字符,其中有32个通用控制符、10个十进制数码、52个英文大小写字母和34个专用符号。扩展的ASCII字符集多加了128个字符,其中有特殊符号字符、外来语字母和图形符号。
ISO 8859字符集
ISO 8859字符是国际标准化组织及国际电工委员会联合制定的一系列字符集的标准,它在ASCII字符集的基础上扩展了不同的字符和符号,这一系列的字符集中每个字符集都收录欧洲某地区的共同常用字符。
GB2312字符集
GB2312字符集是中国国家标准简体中文字符集,由中国国家标准总局发布。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。该字符集共收录6763个汉字,其中一级汉字3755个,二级汉字3008个。同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。因此基本满足了汉字的计算机处理需要。而对于比较罕见的人名、古汉字后来又引入了GBK字符集,其向下与GB 2312完全兼容,向上支持ISO 10646国际标准,起到承上启下的作用。
Unicode字符集
随着字符集的越来越多,各种编码的不兼容,相互之间的通信可能因为编码的不同而导致对方看到乱码。而Unicode字符集是对世界上大部分的文字系统进行了整理,其目的就是提供统一的字符集,使得各个平台、语言能够兼容使用,也逐渐成为一个统一的标准。
三、字符编码
字符编码:字符集表示特定的字符集合,而这些字符需要转换为二进制数才能供计算机使用。因此字符编码就是以二进制数字对字符进行编码,使得计算机能够识别和存储各种文字。字符编码通常决定字符要转换的二进制位数以及每个字符的特定转换值。对于同一个字符集也可以有不同的编码方式,如Unicode字符集根据不同需求有UTF-8、UTF-16、UTF-32等编码方式。
ASCII编码
ASCII码使用8位即一个字节进行编码,因此最多可表示256个字符。标准的ASCII码取值范围是0-127,而扩展的ASCII码则使用了128-255的范围值。
GB2312编码、GBK编码、GB18030编码
GB2312字符集包含了汉字、字母以及原来ASCII字符集内容,因此GB2312编码使用的是16位即两字节的编码才能表示这些字符。GBK编码方式包含了GB2312编码方式,同时规定了只要第一个字节大于127就是汉字,放宽了对低字节的取值限制,可以表示的范围更大。后来由于要添加不同少数民族的文字,出现了GB18030编码方式,该编码方式通过区分单、双、四字节三个部分来扩展字符表示。
Unicode编码
Unicode编码方式规定用16位来统一表示所有字符。且其保持着ASCII字符集中的编码原值,因此对于ASCII字符集中字符,使用Unicode方式编码会存在8位的未使用空间。
UTF-8、UTF-16
UTF-8是Unicode字符集的一种编码方式,是专门为传输设计的一种编码方式。且UTF-8是一种变长的编码方式,内部可以使用1-4字节来表示一个字符,根据不同的字符其编码的长度也不相同,如对于原ASCII字符集中字符用一个字节表示,而对于汉字则用三个字节表示。UTF-8编码方式是从Unicode编码方式转换而来,对于单字节符号其码值和ASCII码一样,而对于n字节的符号,第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。UTF-16则是Unicode字符集的一种16位编码方式,用一个或者两个16位来表示一个字符,因此大部分字符都可以以16位存储,但是其不兼容ASCII编码,且传输时要规定字节序。
Base64编码
就是选出64个字符,包括小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符)作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。因此Base64编码可以将二进制数据编码成ASCII字符,这样图片就可以以字符文本的形式存储。Base64转换过程中首先以每三个字节为一组即24位一组。对于每一个24位组又继续分为4个6位的组,然后每个6位的小组前面添加00。因此每一个大组变为32位,每一个小组变为8位,对每个小组进行编码最后就可以得到编码结果。可以发现经过Base64编码后理论上字符串比原来长1/3。