ASCII、Unicode、UTF-8、GB2312、GBK的关系

ASCII

       由于计算机是美国人发明的,因此最早只把127个字符编码到计算机里,即大小写英文字母、数字、部分西欧字符和一些常用符号等。

 ASCII码只需要1个字节(1byte=8bit)即可存放。

Unicode:

       如果想要处理非ASCII码表里的字符,显然1个字节是不够用的,因此,中国将中文字符编入了GB2312,日本将日文编入了Shift-JIS、韩国将韩文编入了Euc-kr,其他国家也有自己的编码,这样做的结果就是如果将含有多种编码格式的字符存放到同一个文本里,就会出现令人头痛的乱码问题(乱码问题本质就是解码的字典不同导致的。)

       鉴于上述原因,Unicode应运而生,它将所有字符都统一编入在一个字典里,通常用2个字节表示一个字符(部分生僻字符可能会用4个字节表示),这样再也不用担心不同的字符集里的字符放在一起出现乱码的问题了。

       Unicode和ASCII的区别就是:前者是用2个字节表示一个字符,后者是用1个字节表示的。

UTF-8:

        Unicode的出现似乎完美的解决了乱码问题,但是会带来一个新的问题:如果你的文本基本全是英文或数字,那么用Unicode存储会比ASCII存储多出1倍的空间,而且传输起来也不划算(要占用更多的带宽),怎么办呢?能不能根据字符的种类来决定采取占用的字节呢?

          回答是可以的,这就是UTF-8,也就是“可变长编码”,它能根据Unicode字符的种类来决定存储的长度,例如:常用的英文编码成1个字节,汉字编码成3个字节(生僻字除外)。例如:

 如果你的文本里含有大量的英文字符、数字、常用符号,那么使用UTF-8将会节省大量的存储空间,传输起来也会快很多。

GB2312和GBK:

      GB2312是中国自己发布的一套汉字编码规范,于1980年发布。而GBK是中国在1995年颁布的,它向下兼容了GB2312,还向上兼容了ISO国际标准,包含的字符更多了。

 附录:英文字符和中文字符在各字符集占用的字节数

英文字母:

字节数 : 1;编码:GB2312

字节数 : 1;编码:GBK

字节数 : 1;编码:GB18030

字节数 : 1;编码:ISO-8859-1

字节数 : 1;编码:UTF-8

字节数 : 4;编码:UTF-16

字节数 : 2;编码:UTF-16BE

字节数 : 2;编码:UTF-16LE

 

中文汉字:

字节数 : 2;编码:GB2312

字节数 : 2;编码:GBK

字节数 : 2;编码:GB18030

字节数 : 1;编码:ISO-8859-1

字节数 : 3;编码:UTF-8

字节数 : 4;编码:UTF-16

字节数 : 2;编码:UTF-16BE

字节数 : 2;编码:UTF-16LE

猜你喜欢

转载自guwq2014.iteye.com/blog/2422109