python2用的是ascii, python3默认是utf8读取字符python
# coding:gbk
会告诉python3解释器用gbk编码读取字符编辑器
你看到的实际上是unicode编码
可是终端帮你把这个unicode的0和1作一个转换,从unicode转换成了终端可以识别的编码格式,而后变成中文code
# coding:gbk a = '中文' # 用unicode编码存储了这堆0和1 print(a) # 010101010
假设终端的默认编码是gbk , 认识 unicode编码的变量blog
假设终端的默认编码是utf8,认识 unicode编码的变量内存
unicode + 指定的coding编码(str类型)ci
# coding:gbk a = '中文' # 用gbk编码存储了这堆0和1 a = u'中文' # 用unicode编码存储了这堆0和1 print(a)
终端是一个文本编辑器,会有默认编码.unicode
假设终端的默认编码是gbk , 认识 gbk编码的变量字符编码
假设终端的默认编码是utf8, 不认识 gbk编码的变量
table
代码详情 | Python2执行状况 | Python3执行状况 |
---|---|---|
# coding:gbk print('中') 终端:utf8 |
乱码 | 不乱码 |
# coding:utf8 print('中') 终端:utf8 |
不乱码 | 不乱码 |
# coding:gbk print(u'中') 终端:utf8 |
不乱码 | 不乱码 |
# coding:utf8 print(u'中') 终端:utf8 |
不乱码 | 不乱码 |
在Python2中若是指定了字符编码,那么内存存取就会按照指定的字符编码去入内存。解释或去执行时就要按照指定了的字符编码去解释,不然就会乱码。 不然能够在定义变量前面加上u,这样变量就会以unicode编码存入内存。
如:
#coding:gbk name = "爸爸"
但在Python3中就不会有这样的问题,由于不管你指定了什么字符编码,在内存存取时都会使用Unicode编码去入内存,Unicode编码能够和任意的字符编码相互转换,并在读取时按照所需的编码区读取,这样就很好解决了字符编码的问题