经过一上午的查找资料。大概理清楚了bytes类型和str类型的区别。

  bytes类型和str类型在呈现形式有相同之处,如果你print一个bytes类型的变量,会打印一个用b开头,用单引号括起来的序列。比如:  

>>> c = b'\x80abc'
>>> type(c)
bytes

  我们看到c = b'\x80abc'表示的就是一个bytes类型。是不是和字符串很像?只是前面多出来一个b。那b'\x80abc的含义是什么呢?\x80即16进制的两位数,代表十进制的0-255,同时也代表一个字节,8个bit。abc,即英文字母abc,为什么这里不是\x...的形式呢。因为在utf-8里,一个ASCII码 的储存形式完全不变,一个a也就用一个字节来储存。

  那么b'\x80abc'的储存情况就完全明白了,一共四个字节,每个字节值的情况一目了然。下面再做一个实验。

>>> A = b'\xe5\x9d\x8fHello'.decode("utf-8","strict")
>>> A
'坏Hello'
>>> type(A)
str

  首先要知道utf-8是可变长编码。中文字符占3个字节,‘坏’字的utf-8码为\xe5\x9d\x8f 。那么给定一个bytes序列 b'\xe5\x9d\x8fHello', 用utf-8解码,显然能得到坏Hello。并且我们看到,解码之后,A已经变成了str类型,和预想一模一样。

  假如python无法将一个二进制解码成utf-8码,则会报错。比如解码b'\x80abc'则会报错:

  'utf-8' codec can't decode byte 0x80 in position 0:invalid start byte

最新文章

  1. Unity_UGUI知识点思维导图
  2. ASP.net 中手工调用WS(POST方式)
  3. ASP.NET MVC Model绑定的简单应用
  4. KVC浅析和实例
  5. JDBC连接sql server数据库及其它
  6. PoEdu - C++阶段班- Lesson02_C to C++
  7. jruby中的异常
  8. ACE_linux:TCP通信
  9. C#实现时间戳转化
  10. 为了树莓派IIraspberrypi安装emacs+ecb+cedet+session+color-theme+cscope+linum
  11. 第22章 职责链模式(Chain of Responsibility)
  12. web前端安全---读书笔记
  13. 部署自己的GitLab
  14. [LeetCode] Next Greater Element III 下一个较大的元素之三
  15. python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套
  16. 《React设计模式与最佳实践》笔记
  17. Python-递归复习-斐波那契-阶乘-52
  18. ubuntu 14.04 上配置vlc组播源
  19. 带信号灯的最短路dijkstra问题(阿里巴巴2018校园招聘算法题)
  20. cefSharp获取百度搜索结果页面的源码

热门文章

  1. Docker scratch 无法正常运行golang二进制程序的问题
  2. Redis详解(十)------ 从零开始搭建集群
  3. [PHP学习教程 - 系统]004.通过ini_set()来设置系统属性(ini_set Method)
  4. [256个管理学理论]006.刺猬效应(Hedgehog Effect)
  5. 13 . Python3之并发编程
  6. 03 . MysSQL权限和备份
  7. JavaSE (四)程序流程控制 -- if 、switch、for、while
  8. ASP.NET使用HttpHandler进行页面静态化(自动生成页面)
  9. Java实现 LeetCode 768 最多能完成排序的块 II(左右便利)
  10. Java实现 洛谷 Car的旅行路线