python基础--编码
编解码
总而言之:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?如果必须要存储到文件或者网络传输时:我们必须用bytes类型(gbk或utf-8编码的bytes类型字符串)。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?我们用gbk还是utf-8?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?你的应用程序是针对所有的处理都是utf-8,那么你传输的数据就要必须是utf-8
?
?
py3
? ? ? ? ? ? ? ? 默认是str类型(unicode)----->>>>不能直接写入到文件中,也不能再网络上传输(必须编码后传输
? ? ? ? ? ? ? ? bytes类型------->>>>用于网络传输
? ? ? ? ? ? ? ? 网页源码----->>>>charset------->>>>字符集
encode编码/decode解码
Unicode类型(str)---->通过encode(编码)----->转为bytes类型(utf-8,ascii,gbk)
bytes类型(utf-8,gbk)---->通过decode(解码)----->转为Unicode类型(str)
?
?
?
py2
bytes类型---->通过decode(解码)---->转化为Unicode类型(str) Unicode类型---->通过encode(编码)----->转化为bytes类型
?
?
总结:
encode:都是用来得到非unicode类型字符串
decode:都是用来获取unicode类型
?
#py3里面的字符串 >>> s="a" >>> type(s) #py3对应的str是unicode类型 <class ‘str‘> >>> s1=b‘a‘? ?#py3中前面加b是变成bytes类型 >>> type(s1) >>> s="中国" >>> s.encode("utf-8") #encode编码后转为bytes类型 b‘xe4xb8xadxe5x9bxbd‘ #bytes类型前面有个b开头 >>> type(s.encode("utf-8")) <class ‘bytes‘> >>> >>> s.encode("gbk") #str类型转化为bytes类型需要encode编码一下 b‘xd6xd0xb9xfa‘ >>> s.encode("gbk").decode("gbk") #bytes类型转为str类型需要decode一下 ‘中国‘ >>> type(s.encode("gbk").decode("gbk")) <class ‘str‘> >>> 注意:写入文件时,必须encode后才能写入
注意:用什么编码就对应的用什么解码,否则会报错或者乱码
>>> s="光荣之路测试开发培训".encode("gbk")#用gbk编码 >>> s.decode("gbk")#用gbk解码 ?
?
?
#py2里面的字符串 >>> s="abc" >>> type(s) #py2对应的str是bytes类型 <type ‘str‘> >>> >>> s.decode("gbk") #py2str类型不能encdoe,只能先decode, u‘abc‘ #解码后是unicode,开头加了u >>> type(s.decode("gbk")) <type ‘unicode‘> >>> print s.decode("gbk") abc >>> print s.decode("gbk").encode("gbk") abc >>>注:如果记不住可以不用管py2里的情况只记py3的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |