字符编码的发展(ASCII、Unicode、utf-8)

  最近一直在看廖雪峰老师的python网上教程,python内容简单易理解,就没整理,但是字符串编码作为一直困扰自己的问题,看了几遍文章,最终还是将其整理如下,本篇博客总结自廖雪峰老师的网上教程:http://www.liaoxuefeng.com/

  首先我们要明确三者出现的时间依次是:ASCII,Unicode,utf-8,那么为什么这样的顺序出现,就是我们记住这些编码必须要知道的。

  计算机是美国人发明的,而英文中只有127个字母,也就是我们常说的ASCII码表示的,因此8位二进制足以表示,因此就出现了ASCII码表示;

  但是,随着计算机的发展,计算机需要能够表示更多的语言,例如中文、韩文、日文等,中文几万个字,ASCII码肯定表示不了了,何况还有韩文、日文,因此这些国家又都用自己的语言表示方法,例如GB2312Shift_JISEuc-kr等,这样问题本来应该能解决编码的问题的,一个国家语言只要使用一种编码方式就行了。但是问题在于每个国家都有自己的标准,因此编码在不同语言之间就会出现冲突,因此急需一种统一的编码,能够表示“所有”国家的语言(其实是诸多国家,并不一定所有,少众语言可能还不能表示),Unicode编码营运而生。

  然而Unicode编码大一统的表示所有语言,Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。然而自然想到Unicode相对于ASCII码表示的效率很低,因为ASCII码表示一个字符1个字节,而Unicode需要2个,并且世界上绝大多数的语言都是基于英文的,那么如何才能既能表示所有的语言,又能节省表示空间呢,这样utf-8变长编码就出现了。

  utf-8采用变长编码,英文字母符号采用1字节编码,汉字通常3个字节,生僻字也有4-6字节的,这样子既统一了语言表达,又提高了效率。可见ACSII码其实是utf-8的子集。

  问题到这貌似解决了,但是计算机怎么知道你通过哪种语言表示呢,也就是计算机系统如何表示字符编码呢:

  计算机硬盘等存储的是utf-8节省存储空间,计算机内存存储的是Unicode,因此读写的时候会出现编码转换;

  网络传输一样,网络传输使用utf-8编码节省通信开销,计算机内存中存储的是Unicode,因此读写的时候也会出现编码转换。

rw-file-utf-8web-utf-8

----------------------------------------------------------------------

程序员A:借我1000元吧。
程序员B:给你凑个整数,1024元吧

posted @ 2016-11-19 13:25  YouxiBug  阅读(730)  评论(0编辑  收藏  举报