金角大王Alex  python 之路,致那些年,我们依然没搞明白的编码

python2与python3的区别

py2

      str = bytes

      为什么有bytes?

              是因为要表示图片、视频等二进制格式的数据。

      以 utf-8 编码的字符串,在windows上不能显示(Linux默认编码 utf-8 ,windows默认编码 gbk)

      如何在python2里实现写一个软件,在全球各国的电脑上都能直接看?

             以unicode编写你的软件      s = you_str.decode( ' utf-8 ' )

      unicode类型

文件头

      py2:以 utf-8 or gbk... 编码的代码,代码内容加载到内存,并不会被转成unicode,编码依然是 utf-8 or gbk...

      py3:以 utf-8 or gbk... 编码的代码,代码内容加载到内存,会被自动转成unicode

py3

      str = unicode

 

Python2和Python3编码总结

       py2里有str,unicode,bytes,str和bytes基本一致,只有在图片、视频里是不一样的。  py2 str = py3 unicode

       py2不支持中文,默认编码是ASCII,为使py2里编码的能在全球电脑上显示,于是就在py2里加了一个单独的类型,叫unicode,如果程序想在全球电脑里显示,那就要在内存里将编码转成unicode。

       py3里,字符串默认编码unicode,文件默认编码 utf-8 ,将str和bytes做了明确的区分:str就是unicode格式的字符串,bytes就是单纯的二进制。

       py3里不管打印什么字符都是unicode,py2里打印字符会打印成其对应的 utf-8 或 gbk。

       unicode是为了存储和传输,传输是用二进制,存到硬盘里用的是 utf-8 或 gbk 。

       py3里不要转编码,转编码是不可逆的,转不回来的!!!

 

Python只要出现各种编码问题,无非是哪里的编码设置错了。常见的编码错误的原因有:

(1)Python解释器的默认编码

(2)Python源文件文件编码

(3)Terminal使用的编码

(4)操作系统的语言设置