几乎没有在生产环境上用 py3,同时,平时也没有特别得去使用 py3,但是,最近使用 py3 的时候遇到一个问题,发现 py3 很在意区分 str 类型的编码格式了。例如,下面这段代码,在 Python2 中会运行得良好:

  1. [root@liqiang.io]# cat py2.py
  2. import base64
  3. with open("/tmp/test.txt") as f:
  4. print(base64.b64decode(f.read()))
  5. [root@liqiang.io]# python py2.py
  6. a
  7. b

但是,上了 Python3(3.7)之后,发现事情不一样了:

  1. [root@liqiang.io]# cat py3.py
  2. import base64
  3. with open("/tmp/test.txt") as f:
  4. print(base64.b64decode(f.read()))
  5. [root@liqiang.io]# python py3.py
  6. b"a\nb"

所以需要进行编码和解码,其实这是好事情,因为在 Python2 中,我经常干这样的事情:

  1. [root@liqiang.io]# head -3 test.py
  2. import sys
  3. reload(sys)
  4. sys.setdefaultencoding('utf-8')

现在好了,都不用我设置了,所以,啥时候 Python3 才能真正普及?

bytes —> str

  1. [root@liqiang.io]# cat decode.py
  2. str = str(i_am_bytes, encoding='utf-8')

str —> bytes

  1. [root@liqiang.io]# cat encode.py
  2. bytes = bytes(i_am_string, encoding='utf-8')

Ref