编码的发展历史
从内存(文本信息字符串)存到磁盘(二进制字节数据)的过程,称为编码。
从磁盘(二进制字节数据)到内存(文本信息字符串)的过程的过程,称为解码。
在计算机内存中统一使用Unicode编码,当保存到硬盘或者需要传输时,就转换到UTF-8编码。
比如:用记事本编辑文本时,文件读取从磁盘的UTF-8字符被转换为Unicode字符到内存中,保存文件时,会把Unicode字符转换为UTF-8字符保存到磁盘中。
Python解释器执行代码的时候,需要把解释器和执行程序加载到内存中执行。
存的时候用什么编码,取的时候就用什么编码。
内存中编码都是Unicode,但是保存到硬盘中就要指定一个字符编码,而从硬盘中读取到内存就要用存取的编码,否则就会出现乱码。
Python解释器也类似于一个文本编辑器,Python解释器也有自己默认的编码方式。
Python2.x默认ASCII码,python3.x默认的utf-8,可以通过如下方式查询:
查询默认编码方式
import sys
print(sys.getdefaultencoding())
输出
utf-8(python3环境)
ascii(python2环境)
如果在python2解释器去执行一个utf-8编码的文件,就会以默认的ASCII去解码utf-8,一旦程序中有中文,自然就解码错误了,所以我们在文件开头位置声明 #coding:utf-8,其实就是告诉解释器,你不要以默认的编码方式去解码这个文件,而是以utf-8来解码。
Python3的解释器默认utf-8编码,已经不需要添加这一行声明了。