Py3编码解码
 
写的不好请谅解,有问题欢迎指出.
 
python2.x中的解决方案(图片来源于网络)
#!/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。
#!/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则不会
"""
 
 
 
 

最新文章

  1. ORM系列之二:EF(4) 约定、注释、Fluent API
  2. C语言-自定义函数
  3. SOCKET 服务器停止服务时清理连接操作
  4. freeCodeCamp:Where do I belong
  5. java异常处理:建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,如new Bank(100),
  6. Entity Framework 5.0基础系列
  7. Css - 基础的css阴影效果
  8. form 表单jquery验证插件使用
  9. SuperToolTips
  10. uva 11997 K Smallest Sums 优先队列处理多路归并问题
  11. java 字符串转int
  12. hdu4405:概率dp
  13. 项目管理实践教程一、工欲善其事,必先利其器【Basic Tools】
  14. ubuntu 常用命令记录
  15. PHP截取带有汉字的字符串,将汉字按两个字节计算
  16. UE4网络同步属性笔记
  17. ASYNC_NETWORK_IO和PREEMPTIVE_OS_WAITFORSINGLEOBJECT等待事件
  18. JVM -verbose参数详解(转)
  19. 支付宝支付Java代码
  20. php -- 数学函数

热门文章

  1. 【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析
  2. UVa 725 简单枚举+整数转换为字符串
  3. Entity Framework Core 懒加载
  4. Django REST framework 中 3 种类视图的对比
  5. [国嵌攻略][137][DM9000网卡驱动编程]
  6. 【转载备忘】PowerDesigner16.5基本使用
  7. phpstorm 怎么实现分屏展示
  8. 认识Linux分区
  9. Java进阶篇(三)——Java集合类
  10. C#编译成以管理员身份运行程序