python2和3编码
作用:python3.x里默认的str是(py2.x里的)unicode, bytes是(py2.x)的str, b”“前缀代表的就是bytes
python2.x里, b前缀没什么具体意义, 只是为了兼容python3.x的这种写法
https://www.cnblogs.com/single-boy/articles/7562534.html
https://blog.csdn.net/sinat_40292249/article/details/96431295
http://blog.sciencenet.cn/blog-3428464-1247188.html
https://www.jianshu.com/p/19c74e76ee0a
https://blog.csdn.net/weixin_42989523/article/details/81873874
Python3的执行过程
在看实际代码的例子前,我们来聊聊,python3 执行代码的过程
解释器找到代码文件,把代码字符串按文件头定义的编码加载到内存,转成unicode
把代码字符串按照语法规则进行解释,
所有的变量字符都会以unicode编码声明
so ,一切都很美好,到这里,我们关于编码的学习按说就可以结束了。
但是,如生活一样,美好的表面下,总是隐藏着不尽如人意,上面的utf-8编码之所以能在windows gbk的终端下显示正常,是因为到了内存里python解释器把utf-8转成了unicode , 但是这只是python3, 并不是所有的编程语言在内存里默认编码都是unicode,比如 万恶的python2 就不是, 它的默认编码是ASCII,想写中文,就必须声明文件头的coding为gbk or utf-8, 声明之后,python2解释器仅以文件头声明的编码去解释你的代码,加载到内存后,并不会主动帮你转为unicode,也就是说,你的文件编码是utf-8,加载到内存里,你的变量字符串就也是utf-8, 这意味着什么你知道么?。。。意味着,你以utf-8编码的文件,在windows是乱码。
记住下图规则
python3默认使用的是str类型对字符串编码,默认使用bytes操作二进制数据流,两者不能混淆!!
Python3有两种表示字符序列的类型:bytes和str。前者的实例包含原始的8位值,后者的实例包含Unicode字符。Python2也有两种表示字符序列的类型,分别叫做str和Unicode,与Python3不同的是,str实例包含原始的8位值;而unicode的实例,则包含Unicode字符。