几乎没有在生产环境上用 py3,同时,平时也没有特别得去使用 py3,但是,最近使用 py3 的时候遇到一个问题,发现 py3 很在意区分 str 类型的编码格式了。例如,下面这段代码,在 Python2 中会运行得良好:
[root@liqiang.io]# cat py2.py
import base64
with open("/tmp/test.txt") as f:
print(base64.b64decode(f.read()))
[root@liqiang.io]# python py2.py
a
b
但是,上了 Python3(3.7)之后,发现事情不一样了:
[root@liqiang.io]# cat py3.py
import base64
with open("/tmp/test.txt") as f:
print(base64.b64decode(f.read()))
[root@liqiang.io]# python py3.py
b"a\nb"
所以需要进行编码和解码,其实这是好事情,因为在 Python2 中,我经常干这样的事情:
[root@liqiang.io]# head -3 test.py
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
现在好了,都不用我设置了,所以,啥时候 Python3 才能真正普及?
bytes —> str
[root@liqiang.io]# cat decode.py
str = str(i_am_bytes, encoding='utf-8')
str —> bytes
[root@liqiang.io]# cat encode.py
bytes = bytes(i_am_string, encoding='utf-8')