下午看廖雪峰的Python2.7教程,看到 字符串和编码 一节,有一点感觉,结合崔庆才的Python博客 ,把这种感觉记录下来:html

ASCII码:是用一个字节(8bit, 0-255)中的127个字母表示大小写字母,数字和一些符号.主要用来表示现代英语和西欧语言。python

因此处理中文就出现问题了,由于中文处理至少须要两个字节,因此中国制定了GB2312。浏览器

因此,各国制定了各国的标准。日本制定了Shift_JIS,韩国制定了Euc-kr。。。那么,乱码就来了。服务器

为了统一,Unicode诞生了。统一码把全部语言都统一到一套编码里。解决了乱码问题,可是存储和传输效率低下的问题又来了。网站

由于ASCII编码是1个字节,而Unicode编码一般是2个字节。你表示一个英文字母一个字节就够了,可是Unicode却不得不用两个字节来表示(另外一个字节补0)。ui

为了节约,出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不一样的数字大小编码成1-6个字节,经常使用的英文字母被编码成1个字节,汉字一般是3个字节,只有很生僻的字符才会被编码成4-6个字节。若是你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间(ASCII码能够当作是UTF-8的一部分,因此大量只支持ASCII编码的历史遗留软件能够在UTF-8编码下继续工做)。编码

如今若是我要用Notepad编辑一个python的脚本,我打开文件的过程当中,内存中就开辟了一段空间,来临时存储我保存的代码,在计算机内存中,统一使用Unicode编码。code

因此我写的中文字符串,要在前面加u表示是Unicode编码的字符串。htm


静觅博客中也是:blog


可是为何有时候,咱们要用到decode('utf-8'),再结合静觅博客来看:


由于糗事百科的服务器发送给客户端(也就是浏览器)的响应的编码就是‘UTF-8':



为了在文本编辑(读取文本)时,内存中须要Unicode编码,因此用decode('utf-8')解码,把UTF-8转化为Unicode编码(同理,encode('utf-8')是把Unicode转化为UTF-8编码)。

当保存文本到保存到硬盘或者须要传输的时候,就转换为UTF-8编码,因此咱们须要在python脚本开头定义#-*-coding:utf-8-*-