⼏种常见的编码⽅式
⽆论在是在编辑⽂本⽂件的时候,还是在制作⽹页的时候,总会遇到⽂本编码⽅式的问题。如果处理不当,就会出现乱码的问题。因此,有必要对⽂本的编码⽅式做⼀个详尽的了解。
常见的⼀些字符编码⽅式⽆⾮有:Unicode、ASCII、GBK、GB2312、UTF-8。下⾯先对常见的这⼀些字符编码⽅式作下说明:
1.ASCII码
这是美国在19世纪60年代的时候为了建⽴英⽂字符和⼆进制的关系时制定的编码规范,它能表⽰128个字符,其中包括英⽂字符、阿拉伯数字、西⽂字符以及32个控制字符。它⽤⼀个字节来表⽰具体的字符,但它只⽤后7位来表⽰字符(2^7=128),最前⾯的⼀位统⼀规定为0。
2.扩展的ASCII码
原本的ASCII码对于英⽂语⾔的国家是够⽤了,但是欧洲国家的⼀些语⾔会有拼⾳,这时7个字节就不够⽤了。因此⼀些欧洲国家就决定,利⽤字节中闲置的最⾼位编⼊新的符号。⽐如,法语中的é的编码为130(⼆进制10000010)。这样⼀来,这些欧洲国家使 ⽤的编码体系,可以表⽰最多256个符号。但这时问题也出现了:不同的国家有不同的字母,因此,哪怕它们都使⽤256个符号的编码⽅式,代表的字
母却不⼀样。⽐如,130在法语编码 中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中⼜会代表另⼀个符号。但是不管怎样,所有这些编码⽅式中,0—127表⽰的符号是⼀样的,不⼀样的只是128—255的这⼀段。这个问题就直接促使了Unicode编码的产⽣。
3.Unicode符号集
正如上⼀节所说,世界上存在着多种编码⽅式,同⼀个⼆进制数字可以被解释成不同的符号。因此,要想打开⼀个⽂本⽂件,就必须知道它的编码⽅式,否则⽤错误的编码⽅式解读,就会出现乱码。为什么电⼦邮件常常出现乱码?就是因为发信⼈和收信⼈使⽤的编码⽅式不⼀样。⽽Unicode就是这样⼀种编码:它包含了世界上所有的符号,并且每⼀个符号都是独⼀⽆⼆的。⽐如,U+0639表⽰阿拉伯字母
Ain,U+0041表⽰英语的⼤写字母A,U+4E25表⽰汉字“严”。具体的符号对应表,可以查询,或者专门的汉字对应表 。很多⼈都说Unicode编码,但其实Unicode是⼀个符号集(世界上所有符号的符号集),⽽不是⼀种新的编码⽅式。
但是正因为Unicode包含了所有的字符,⽽有些国家的字符⽤⼀个字节便可以表⽰,⽽有些国家的字符要⽤多个字节才能表⽰出来。即产⽣了两个问题:第⼀,如果有两个字节的数据,那计算机怎么知道这两个字节是表⽰⼀个汉字呢?还是表⽰两个英⽂字母呢?第⼆,因为不同字符需要的存储长度不⼀
样,那么如果Unicode规定⽤2个字节存储字符,那么英⽂字符存储时前⾯1个字节都是0,这就⼤⼤浪费了存储空间。
上⾯两个问题造成的结果是:1)出现了unicode的多种存储⽅式,也就是说有许多种不同的⼆进制格式,可以⽤来表⽰unicode。
2)unicode在很长⼀段时间内⽆法推⼴,直到互联⽹的出现。
4.UTF-8
互联⽹的普及,强烈要求出现⼀种统⼀的编码⽅式。UTF-8就是在互联⽹上使⽤最⼴的⼀种unicode的实现⽅式。其他实现⽅式还包括UTF-16和UTF-32,不过在互联⽹上基本不⽤。重复⼀遍,这⾥的关系是,UTF-8是Unicode的实现⽅式之⼀。
UTF-8最⼤的⼀个特点,就是它是⼀种变长的编码⽅式。它可以使⽤1~4个字节表⽰⼀个符号,根据不同的符号⽽变化字节长度。
UTF-8的编码规则很简单,只有两条:
1)对于单字节的符号,字节的第⼀位设为0,后⾯7位为这个符号的unicode码。因此对于英语字母,
UTF-8编码和ASCII码是相同的。2)对于n字节的符号(n>1),第⼀个字节的前n位都设为1,第n+1位设为0,后⾯字节的前两位⼀律设为10。剩下的没有提及的⼆进制位,全部为这个符号的unicode码。
5.GBK/GB2312/GB18030
GBK和GB2312都是针对简体字的编码,只是GB2312只⽀持六千多个汉字的编码,⽽GBK⽀持1万多个汉字编码。⽽GB18030是⽤于繁体字的编码。汉字存储时都使⽤两个字节来储存。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论