Python2 和 Python3字符编码的区别
1.python解释器运行代码的流程
1.启动python解释器(相当于文本编辑器)
2.打开文件,从硬盘把文件的内容读取到内存(涉及字符编码)
3.解释从硬盘中获取的内容(就会生成变量就开辟内存空间存放变量,把变量存放在内存中,涉及字符编码)
python2默认用的是ascii读取字符,python3默认是utf8读取字符
2.python2的运行流程
unicode + 指定的coding编码(str类型)
# coding:gbk
a = '中文' # 用gbk编码存储了这堆0和1
a = u'中文' # 用unicode编码存储了这堆0和1
print(a)
终端是一个文本编辑器,会有默认编码.
假设终端的默认编码是gbk , 认识 gbk编码的变量
假设终端的默认编码是utf8, 不认识 gbk编码的变量
3.python3的运行流程
我们看到的其实是unicode
但是终端帮你把这个unicode的0和1做一个转换,从unicode转换成了终端能够识别的编码格式,然后变成中文
# coding:gbk
a = '中文' # 用unicode编码存储了这堆0和1
print(a) # 010101010
假设终端的默认编码是gbk , 认识 unicode编码的变量
假设终端的默认编码是utf8,认识 unicode编码的变量
4.区别
在第三步的时候python2和python3有区别
- python2
会用unicode编码存放变量; 还会用文件默认的编码存放变量
假设文件默认的编码是gbk,生成的变量就会用gbk形式存储变量,终端默认编码也是gbk,没有问题
假设文件默认的编码是gbk,生成的变量就会用gbk形式存储变量,终端默认编码也是utf8,有问题 *
- python3
就用unicode的编码存放变量 a = 1当我们打印a的时候,本来应该打印出0和1,但是终端会按照他的编码规则吧0和1转成人类认识的字符#
用什么编码存,就用什么编码取