天天看点

浅析python2x与python3x里的str,unicode,bytes关系

python2x中:

[str].decode(str对应的编码)=[unicode],并且用什么码编码就用什么码解码

[unicode].encode(你想要的编码方式)=[str],解释器编码方式要与字符串的编码方式一样才能解出正确的字符。

python3x中:

str不能解码了,str对象压根没有decode属性了,在Python3x中不在有unicode这一说了,只有str和bytes这两个概念了

(其实是Python把unicode隐藏了)。

(str).encode(‘编码方式’)=(bytes) 

(bytes).decode(‘bytes对应的编码’)=(str) 

总结:

我们来总结一下,Python2x中,保存了什么字节序列,他就原封不动的读取进来,然后告诉你这是str类型(底层是字节序列),那么你可以把它decode一下,变成可以跨平台使用的unicode。好了,你要输出到文件中去了,那你得以一个具体的规则输出,也就是把unicode encode一下又变str(字节序列)。 

Python3x中,文本中保存了字节序列,读取的时候Python解释器用设定的默认编码去解码了一道,变成了unicode,所以你不需要操作了,但是它告诉你这是str,你就当不知道,反正不管怎么夸平台都不会出错了。到了要输出的时候,再把unicode encode成bytes(字节序列)。