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. Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)

    row_number() over()   1.2.3.4.5.6.7 rank() over()  1.2.2.4.5.5.7 dense_rank() over() 1.2.2.3.3.4.5 n ...

  2. EasyUi控件Datagrid

    很久没有打开我的博客园,刚刚大概扫了一眼我之前写的笔记,关于Devexpress那篇居然有四千多的浏览记录,不知道对浏览过的博友有没有起到一点点作用.当然我写笔记仅仅只是给自己留个记忆,如果歪打正着帮 ...

  3. C# 收银机顾显(客显)及打印小票(58热敏打印机)

    最近做winform收银机,设计顾显及打印小票总结. 1.顾显(串口COM1) 只涉及到总计,所以只是简单的功能. public static ClientDisplayResult Display( ...

  4. kubectl get componentstatus ERROR:HTTP probe failed with statuscode: 503

    通过kubectl命令可以查看k8s各组件的状态: [root@wecloud-test-k8s-1 ~]# kubectl get cs NAME STATUS MESSAGE ERROR cont ...

  5. 201621123023《Java程序设计》第8周学习总结

    一.本周学习总结 二.书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 由图可知,传入参数后调用indexOf函数来判断是否存在,会循环整个eleme ...

  6. http与https通信

    HTTP协议 http协议与https协议的区别 GET请求和POST请求的说明与比较 发送GET和POST请求(使用NSURLSession)

  7. Stacking方法详解

    集成学习方法主要分成三种:bagging,boosting 和 Stacking.这里主要介绍Stacking. stacking严格来说并不是一种算法,而是精美而又复杂的,对模型集成的一种策略. 首 ...

  8. [转] Cisco路由器DNS配置

    禁用Web服务 Cisco路由器还在缺省情况下启用了Web服务,它是一个安全风险.如果你不打算使用它,最好将它关闭.举例如下: Router(config)# no ip http server 配置 ...

  9. TSL协议升级导致的问题:caught when processing request: Received fatal alert: protocol_version

    近日,公司升级TSL协议,禁用TSL1.0,导致原本好好的https接口,报以下错误: 2019-03-05 15:43:29 [org.apache.commons.httpclient.HttpM ...

  10. 前端JS批量添加校验数据唯一性

    <script type="text/javascript"> //维护删除数组中的某一项 Array.prototype.remove = function(val) ...