Py3编码解码
2018-02-07 10:14 親親宝贝 阅读(326) 评论(0) 编辑 收藏 举报Py3编码解码
写的不好请谅解,有问题欢迎指出.
python2.x中的解决方案(图片来源于网络)
![](https://images2017.cnblogs.com/blog/1329831/201802/1329831-20180207101416701-1446688105.jpg)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : "Wjl" # @Date : 2017/11/24 # @Time : 15:06 # @SoftWare : PyCharm # @File : 编码解码.py """ Python2.x 中默认编码是Ascii,所以想写中文必须在开头声明 # -*- coding: utf-8 -*- 否则就不支持中文 或者利用如下的方法来解码 """ str1 = '测试' # 将utf-8解码成unicode str1_to_unicode = str1.decode('utf-8') # 注意,这里这个utf-8是原编码 # 再将unicode编码成gbk unicode_to_gbk = str1_to_unicode.encode('gbk') print(str1) print(str1_to_unicode) print(unicode_to_gbk) """ 总结: 所有的编码想互相转换,必须先decode成unicode,然后才能encode到指定编码 为什么必须要先decode? 因为unicode是万国码,什么语言都支持,相当于是其他编码的父类 父类派生了所有的儿子,你不能从儿子变成另一个儿子.因为你不了解另一个儿子的构造, 而父亲知道(怎么有点邪恶的感觉),所以你必须先decode成unicode,然后才能encode到其他编码。 """
python3.x中字符的默认编码是Unicode,文件默认编码是utf-8,也就是说在python3中你不需要再声明: # -*- coding: utf-8 -*- 这句话了。
虽然文件编码是utf-8,但是字符的编码都是Unicode。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/usr/bin/env python # @Author : "Wjl" # @Date : 2017/11/24 # @Time : 15:06 # @SoftWare : PyCharm # @File : 编码解码.py s = '测试字符串' s_to_gbk = s.encode('gbk') print(s) """ 在python3里encode会在编码的同时会把中文字符转成bytes类型,所以下面打印会出现 b'\xb2\xe2\xca\xd4\xd7\xd6\xb7\xfb\xb4\xae' """ print(s_to_gbk) # 想要看见怎么办? # 只能把它再转回去 print(s_to_gbk.decode('gbk')) """ 那你说,这不是多此一举吗? 错! 这种形式就让我们的编码灵活,当我们想要其他编码的时候encode即可,需要解码是decode即可 而不需要像PY2一样先decode到unicode然后再encode,PY3可以直接encode。 而且py3默认在编码时会给你做成butes类型,这个类型很有用,在某些函数传递参数时它们接收的就是这个类型的参数 而你编码后就可以直接将这个类型传递给需要的函数。 举个列子: client发送数据给server端 py2: 如果我encode时gbk,那么发送给server端,server端如果是utf8,就可能出现乱码 py3 我encode是gbk,发送给server端是一个bytes类型的数据,那么server端想看就必须解码。 所以py3好处就是一旦编码就必须解码,强制你解码,就减少了乱码问题,而py2则不会 """
我心里一直有个梦,想去嵩山少林学武功... QQ:1976883731