最近一直在看廖雪峰老师的python网上教程,python内容简单易理解,就没整理,可是字符串编码做为一直困扰本身的问题,看了几遍文章,最终仍是将其整理以下,本篇博客总结自廖雪峰老师的网上教程:http://www.liaoxuefeng.com/python
首先咱们要明确三者出现的时间依次是:ASCII,Unicode,utf-8,那么为何这样的顺序出现,就是咱们记住这些编码必需要知道的。程序员
计算机是美国人发明的,而英文中只有127个字母,也就是咱们常说的ASCII码表示的,所以8位二进制足以表示,所以就出现了ASCII码表示;web
可是,随着计算机的发展,计算机须要可以表示更多的语言,例如中文、韩文、日文等,中文几万个字,ASCII码确定表示不了了,况且还有韩文、日文,所以这些国家又都用本身的语言表示方法,例如GB2312
、Shift_JIS
、Euc-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,所以读写的时候会出现编码转换;spa
网络传输同样,网络传输使用utf-8编码节省通讯开销,计算机内存中存储的是Unicode,所以读写的时候也会出现编码转换。操作系统
----------------------------------------------------------------------code
程序员A:借我1000元吧。
程序员B:给你凑个整数,1024元吧