字符编码

字符编码

常见字符编码

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编码存放字符串。

看十遍不如自己写一遍!巩固基础,纵横开拓!
原文地址:https://www.cnblogs.com/gyxpy/p/14417670.html