参考https://blog.csdn.net/VictoriaW/article/details/75314737
首先看一段脚本:
>>> mystr = '哈哈'
>>> mystr
'\xe5\x93\x88\xe5\x93\x88' #我用python2.7.16,str类型字符串在buffer缓存非ascii字符时自动进行unicode码 ——> UTF-8码的编码
>>> type(mystr)
<type 'str'>
>>> len(mystr) #6个字节没错
6
>>> mystr02 = mystr.decode('utf-8')
>>> mystr02
u'\u54c8\u54c8' #将mystr按utf-8解码得到unicode码表示的字符窜,只是一个字面量,文件IO时一般没有直接写Unicode码的
>>>
>>> import sys
>>> print(sys.getdefaultencoding())
ascii #这里的编码格式有一些用途,比如不指定编码格式进行文件IO时
>>> fh = open('temp.txt','w')
>>> fh.write(mystr02)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) #这里报错'ascii'编码不能编码不在range(128)范围的unicode字符的确,但,下面utf-8字符串就能写啊
>>> fh.write(mystr)
>>> mystr
'\xe5\x93\x88\xe5\x93\x88'