字符编码
常见字符编码
ascii:只认识英文和特殊符号,1bytes 256完全够用
gbk:国标码,认识中文和英文,1bytes存英文,2bytes存中文,65536完全够用。
utf8:Unicode Transformation Format,即unicode的转换格式。使用utf8是时代的进步,是良性的进化,几十年后老的软件抛弃掉后,内存里面可能全部都是utf8编码了。
utf-8是针对Unicode的可变长度字符编码:一个英文字符占1Bytes,一个中文字符占3Bytes,生僻字用更多的Bytes存储
unicode:万国码,90年研发,python89年推出,所有的编码都认识,目前内存中的统一编码。固定用2bytes存放一个字符
其他编码,每个国家都有自己的编码。
所有国家的软件分别用自己国家的编码编写,内存统一用unicode后,所有软件都可以使用,统一转为unicode
unicode----内存运算编码,大多数文件是英文的,固定的2bytes加重了IO效率,所以出内存不允许为unicode编码,要编码为其他编码,多为utf8编码。
utf8--------网络传输或数据存储编码
字符串源码文件读取,字符串数据类型的存储
python文件读取与执行
python2解释器默认以ASCII方式解码python文件,从硬盘读入内存。
python3解释器默认以utf8方式解码python文件,从硬盘读入内存。内存中都是unicode编码。中间的转换由os自动帮你完成。
python2的为了兼容当下的措施:
1.文件头加# coding:utf8或其他,让解释器以文件头执行的方式来读取接下来的字符串源码。
因为第一行是英文,无论什么编码都可以读懂。
2.字符串前面加u,a=u“上”,让字符串在内存中以unicode方式存在
字符串数据类型
当字符串源码文件读入内存后,python解释器开始对源码语法分析,申请内存存放数据。
为字符串申请内存的时候,python3直接用unicode编码为字符串在栈中申请内存,所以python3用户不用对字符串做什么。
python2是89年的版本,而unicode是90产生的标准,python2在内存中对字符串以ascii编码存放,为了兼容当下,python2在字符串前面加u。
结论:
python3不用你做任何事,utf8方式读取源码文件,字符串以unicode编码存放字符串。
python2指定文件头#coding:utf8读取源码文件,字符串前面加u,以unicode编码存放字符串。