py2和py3中关于字符串的最大区别?

python2中只有 unicode类型

而python3中有 string bytes两种类型

关于string和bytes的区分?

1.str是文本序列、bytes是字节序列 (文本=字符)

2.字节是没有编码的、文本是有编码的(单字节编码/双字节编码):utf-8 gbk,GB18030等

3.什么是编码?
编码可以说是一种“字节的组织方式”
字符是由字节组成的,而字符的编码规定了它是如何来组织这些字节的,即如何使用字节来表示这些字符

encode( )与decode( )

# encode()用于将str ——> bytes

In [1]: '卢'.encode()
Out[1]: b'\xe5\x8d\xa2' In [2]: bin(0xe5)
Out[2]: '0b11100101'
In [3]: bin(0x8d)
Out[3]: '0b10001101'
In [4]: bin(0xa2)
Out[4]: '0b10100010' //所以'卢'在计算机中的表示就是这些二进制 # python3字符串默认使用utf-8编码,encode('')可指定不同编码方式
In [5]: '卢'.encode('GBK')
Out[5]: b'\xc2\xac' # decode()用于将bytes ——> str
In [6]: b'\xe5\x8d\xa2'.decode()
Out[6]: '卢'

bytes类型

# 通过b前缀(b' ')定义bytes

# 除了encode外,str的操作都有对应bytes的版本, 但是传入参数也必须是bytes
In [1]: b'abc'.find('b')
TypeError: a bytes-like object is required, not 'str' In [2]: b'abc'.find(b'b')
Out[2]: 1 # 要注意bytes的操作是按照字节来的
In [3]: len('卢'.encode())
In [3]: 3 In [4]: '卢'.encode().find(b'\xe5')
Out[4]: 0 # bytes类型自身的两个操作:decode()、hex()
In [6]: b.decode()
Out[6]: 'abc' In [7]: b.hex() //转化为16进制
Out[7]: ''

bytearray类型

# bytearray是bytes的可变版本
# 使用场景:例如图片处理 # 相对于bytes来说,bytearray多了insert、append、extend、pop、remove、clear、reverse(这些原地修改的方法)
# 并且可以索引操作
# 但insert、append、remove、count的参数必须是int,且范围是0-256 In [11]: b=b'abc';type(b)
Out[11]: bytes In [13]: ba=bytearray(b);type(ba)
Out[13]: bytearray In [15]: b[1]=b'B'
TypeError: 'bytes' object does not support item assignment In [16]: ba[1]=int(b'B'.hex(),16); print(ba)
Out[16]:bytearray(b'aBc')

[PY3]——内置数据结构(5)——字符串编码的更多相关文章

  1. [PY3]——内置数据结构(3)——字符串及其常用操作

    字符串及其常用操作xmind图 字符串的定义 1. 单引号/双引号 In [1]: s1='hello world' In [2]: s1="hello world" 2. 三对单 ...

  2. [PY3]——内置数据结构(4)——字符串格式化(format)

    字符串格式化是拼接字符串的一种手段 join和+拼接字符串的方法,难以控制格式 printf style 字符串格式化 这种方法是从c语言继承过来的 # 待格式化的字符串:一个字符串存在占位符 In ...

  3. Python内置数据结构之字符串str

    1. 数据结构回顾 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于字符串,但是字符串是不可变序列,因此所有的元素赋值和切片赋值都是非法的. >>> ...

  4. [PY3]——内置数据结构(6)——集合及其常用操作

    集合及其常用操作Xmind图          集合的定义 # set( ) # {0,1,2} //注意不能用空的大括号来定义集合 # set(可迭代对象) In [1]: s=set();type ...

  5. [PY3]——内置数据结构(7)——字典及其常用操作

    字典及其常用操作Xmind图 关于字典 字典是一种key-value结构 字典是无序的 字典的定义 # {}大括号可以直接定义一个空字典 In [1]: d={};type(d) Out[1]: di ...

  6. [PY3]——内置数据结构(9)——线性结构与切片/命名切片slice()

    线性结构的总结 列表list  元组tuple  字符串str  bytes  bytearray的共同点: 都是顺序存储.顺序访问的: 都是可迭代对象: 都可以通过索引访问 线性结构的特征: 可迭代 ...

  7. [PY3]——内置数据结构(8)——解构与封装

    ### 解构的理解与用法 ### 解构是python很有特色的一个功能,被很多语言借鉴(例如ES6) # 元素按照顺序赋值给变量 In [31]: lst=list(range(5)) In [32] ...

  8. [PY3]——内置数据结构(1)——列表及其常用操作

    列表及其常用操作_xmind图         about列表 列表是一个序列,用于顺序存储数据 列表分为两种:ArrayList(用数组实现).LinkedList(用链表实现) 定义与初始化 #l ...

  9. [PY3]——内置数据结构(2)——元组及其常用操作

    定义和初始化 #tuple() 使用工厂函数tuple定义一个空元组 #() 使用圆括号定义一个空元组 #(1,2,3) 使用圆括号定义有初始值的元组 #tuple(可迭代对象) 把可迭代对象转换为一 ...

随机推荐

  1. 执行计划--WHERE条件的先后顺序对执行计划的影响

    在编写SQL时,会建议将选择性高(过滤数据多)的条件放到WHERE条件的前面,这是为了让查询优化器优先考虑这些条件,减少生成最优(或相对最优)的执行计划的时间,但最终的执行计划生成过滤顺序还是决定这些 ...

  2. sql-修改每条数据的某一个字段的值

    update B set B.maildata =(select SUBSTRING(maildata,0,3) from basedata where basedata.cid = B.cid)+( ...

  3. unity 移动物体的方式

    1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...

  4. 当Shell遇上了NodeJS

    此文已由作者尧飘海授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 摘要 在企业级系统维护和互联网运维中,Shell脚本的编写与维护常必不可少, 但是Shell脚本的编写与调试 ...

  5. 水平居中和transform: translateY(-50%) 实现元素垂直居中效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. robot framework学习笔记之二———变量

    Robot Framework的变量分为标量, 列表和字典, 分别使用语法格式 ${SCALAR}, @{LIST} 和 &{DICT} 来定义. 此外, 环境变量可以直接使用语法 %{ENV ...

  7. 服务器变量 $_SERVER 详解

    摘抄:http://ha.cker.in/942.seo 1.$_SESSION[‘PHP_SELF’] — 获取当前正在执行脚本的文件名 2.$_SERVER[‘SERVER_PROTOCOL’] ...

  8. HTTP 缓存机制详解

    从这里看的 http://mp.weixin.qq.com/s/8UXEMQBkV9hHwtu9R7mV5w

  9. javascript高逼格代码实现数组去重,JSON深度拷贝,匿名函数自执行,数字取整等

    1.如何装逼用代码骂别人傻逼 (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]] 2.如何优雅的用代 ...

  10. Java_多线程

    线程(Thread) 1.线程是CPU进行资源调度的最小单位 2.线程是进程实际运行的单位,处理进程中无数的小任务 3.线程共享代码和数据空间 4.一个进程可以并发多个线程,线程之间切换系统开销很小 ...