上一篇文章介绍了计算机编码发展历史和编码方式,现在我们聚焦到python语言中,在最新的Python3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言。例如:

print('我喜欢 computer'.encode('utf-8'))

解释:print函数输出的这句话在python里是使用Unicode编码的(当然它此时也在内存中,因为它现在正被加载着...)

  • 打印结果:b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2 computer'

看这个输出十分有趣,首先,输出是以b开头的,说明这是一段bytes。有没有想起上篇文章说过的utf-8是向下兼容ASCII码的?
你看输出中的英文computer就被原样输出,而ASCII码不能识别的中文,则用utf-8编码方式来表示,如\xe8,\x88等等。
那Unicode编码方式用得好好的,可以直接混合输出英文和中文等多种语言,换成utf-8输出字符只有英文能让我们看懂,中文变成了难以分辨的十六进制(\xe8\xbf\x99\xe5\x8f\xa5\xe8...),我们为什么还要有utf-8编码方式呢?
想到这个问题说明你已经get到点了。你想,utf-8编码方式的优点是什么?
就是省内存啊
那么,由于Python的字符串类型是str,在内存中以Unicode编码的,一个字符对应若干个字节。
如果要在网络上传输,或者保存到磁盘上,就需要把Unicode编码的str变为以字节为单位的bytes,而通过utf-8编码或者ASCII码编码生成的结果就是以字节为单位的bytes。
这句话这么长无非就重复一个观点:

  • python中的str是以Unicode编码的,如果要在网络上传输,或者保存到磁盘上,就得转换为utf-8编码方式。

再举个例子:

print('I love computer'.encode('ascii'))
  • 打印结果:b'I love computer'

解释:由于'I love computer'是纯英语,所以可以用ASCII编码。
再看:'I love computer'和'b'I love computer''有什么不同?没错,多了一个b。这个b大有玄妙之处:
'I love computer'是python中的str,是以Unicode方式编码的。
'b'I love computer''也是python中的str,但它是以ASCII码编码的。
同样用utf-8编码打印结果是一样的,(ASCII编码实际上可以被看成是UTF-8编码的一部分)
好了,前面是对纯英文的str进行编码,那对中文的str编码呢?可以对中文的str进行utf-8编码,可以进行ASCII码编码吗?

print('我喜欢 computer'.encode('ascii'))

报错:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

str_en = 'I love computer'
str_cn = '我喜欢 computer'
bytes_e = b'I love computer'
bytes_c = b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2 computer'
#bytes_cm = b'我喜欢 computer'   # bytes can only contain ASCII literal characters.# bytes方法进行编码
def bytes_sample():bytes_en_by = bytes(str_en, encoding='utf_8')bytes_cn_by = bytes(str_cn, encoding='utf_8')print('纯英文字符串转换为bytes:',bytes_en_by)print('含中文字符串转换为bytes:',bytes_cn_by)# 编码
def encode_sample():bytes_en = str_en.encode('utf-8')bytes_cn = str_cn.encode('utf-8')bytes_en_as = str_en.encode('ascii')print('utf-8纯英文编码:',bytes_en)print('utf-8含中文编码:',bytes_cn)print('ascii纯英文编码:',bytes_en_as)#str_bytes= str.encode(str_cn)                   # 默认utf-8,等价于下面3个#str_bytes= str.encode(str_cn,'utf_8')#str_bytes= str.encode(str_cn,encoding='utf_8')str_bytes= str_cn.encode()print('str转成by含中文:',str_bytes)#bytes_cn_as = str_cn.encode('ascii')#print('ascii含中文编码,会报错:',bytes_cn_as)# 解码
def decode_sample():str_e = bytes_e.decode('utf-8')str_c = bytes_c.decode('utf-8')str_a = bytes_e.decode('ascii')print('utf-8纯英文解码:',str_e)print('utf-8含中文解码:',str_c)print('ascii纯英文解码:',str_a)if __name__ == '__main__':encode_sample()#decode_sample()#bytes_sample()

注意:b后面加上字符串,可以自动转换为bytes类型,但是只针对ASCII类型

【Python】python3编码方式encode介绍相关推荐

  1. python mysql 编码方式,Python3编码与mysql编码介绍

    Python3自诩解决了编码问题,但还是有一系列的坑.本文就记录下前几天遇到的python3编码问题.mysql编码问题附带介绍. python3 json串的编码 针对于包含中文的字典,如果想要正常 ...

  2. python与编码方式

    1.编码方式: ASCII编码:用来表示英文,它使用1个字节表示,其中第一位规定为0,其他7位存储数据,一共可以表示128个字符. 拓展ASCII编码:用于表示更多的欧洲文字,用8个位存储数据,一共可 ...

  3. python默认编码方式_关于设置python默认编码方式的问题

    2019-8-27 07:45:36 本帖最后由 傻纸 于 2019-8-27 10:02 编辑 查了一会资料得出的结论是如果你用的是python3.x,那么就最好别去设置sys.defaultenc ...

  4. python获取编码方式_在Python中获取HTTP响应的字符集/编码的好方法

    小编典典 _, params = cgi.parse_header('text/html; charset=utf-8') print params['charset'] # -> utf-8 ...

  5. python中的编码方式

    说明 这里我们以python2.7为例讲解python的编码方式 指定执行编码方式 python2.7的默认编码方式为ascii字符集,这里所说的编码方式指执行编码方式,在编程过程中,有三个地方都涉及 ...

  6. python采用哪种编码方式_Python编码格式的指定方式

    参考自: http://python.jobbole.com/85852/, 原文探究的更深,有兴趣的可以去看看. 简介来讲就是使用一种特殊的注释来声明编码格式,如何判断这种格式也用了很简单粗暴有效的 ...

  7. python 的编码和解码

    前言 参考链接 和自己的理解进行整理更新 一.字符与字节 字符是人类能够识别的字体符号,而这些符号要保存到计算机的存储中,就需要用计算机能够识别的字节来表示. 字符编码的作用:将人类可识别的字符转换为 ...

  8. python代码编码成jni_python 设置文件编码格式的实现方法

    如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCII编码.(python3已经没有这个问题了,python3默认的文件编码是UTF-8 ...

  9. python3文件的编码类型是什么_python3.x - 怎么查看某个文件的编码方式?python

    问 题 python的确很赞,但是编码这个问题真的太尿性了... 现在我有一个文件,不论他的编码方式是什么,我都想把它转化成utf-8的格式.我的想法是先读取文件内容,保存到data变量中去,然后再以 ...

最新文章

  1. sskeychain使用(轻量级框架)
  2. excel求和为什么是0_Excel教程:小小的N函数竟如此厉害
  3. 图像凸集投影法_论文分享|数字投影结构光三维测量方法研究
  4. php实现文件夹管理器,php实现文件管理与基础功能操作
  5. 向人类再进一步|MIT×UMich探索可以理解物体空间关系的人工智能
  6. 华大 MCU 之一 HC32F460 替换 STM32F411 移植记录
  7. boost::type_index模块type_index`(和 `type_info`)能够存储确切的类型,无需剥离 const、volatile 和引用
  8. 前端JavaScripts基础知识点轮播图
  9. 华为底部虚拟导航栏挡住布局
  10. 内容分发网络 CDN 是如何提高网页加载时间的?
  11. python学习(八)定制类和枚举
  12. 保存页面的滚动条的位置
  13. 【联合仿真】电机与机械臂的联合simulink仿真
  14. pythonmooc期末考试编程题_大学moocPython编程基础期末考试搜题公众号答案
  15. 每日算法系列【LeetCode 287】寻找重复数
  16. 直播源 列表 转换 php,Telelist直播源制作与格式转换工具 V2.4.1下载 制作XSPF、DPL、M3U等播放列表格式...
  17. 微软补丁导致填制凭证右侧滚动条消失
  18. 运动控制器的自定义G代码编程应用
  19. 梦幻西游手游服务器维护公告,《梦幻西游手游》10月5日维护公告 部分区服合并...
  20. China Mobile”、“China Unicom”,请修改为中国移动、中国联通

热门文章

  1. 在虚拟机中ftp服务器的配置,ftp服务器在虚拟机中配置文件
  2. java 阻塞 socket_java socket非阻塞I/O
  3. vs2019Linux守护,Visual Studio 2019将支援Ninja显着提升Linux专案建置效率
  4. 内部类详解————静态内部类
  5. 一篇博客读懂设计模式之---模板方法模式
  6. LeetCode算法入门- Remove Element -day20
  7. css居中的几种方法_CSS布局中的水平居中的方法
  8. 基于SVD的降维优化
  9. cp命令显示进度条_干货|| Linux常用命令大全
  10. python开发框架大全_最受欢迎 Top 12 Python 开源框架,你都用过吗?