Python的bytes和str
Python和C的字符串
在Python 3 中,bytes单独作为一个类型,不再和str类型混在一起。关于字符串和字节,我想先回顾下C/C++
在C/C++中,字符串是由char数组构成,每个元素是一个Char数据结构,数组的结尾是'\0'空字符。
- char是默认的unsigned的整型数据, 用于存储英文字符和小的整数(取值是0-255)。
- ASCII是char的子集,因此char很好存储英文字母, 满足存储英文字符的需求。
在C/C++中,int是整型的数据结构。而Python的int被设计成类,它有自己的属性和方法。这是Python和C/C++截然不同的地方。
同样在C/C++中的char整型,到了Python中,相应的是bytes类。我们可以这样说:Python中的Bytes类,本质上是C/C++中的char数组。
如下是几个demo。
1. 对比bytes和string
对于字节:
my_bytes = b'Python'
print(type(my_bytes))
print(my_bytes[0])
print(my_bytes[0] + 1)
# 结果:
<class 'bytes'>
80
81
对于字符串:
my_string = 'Python'
print(type(my_string))
print(my_string[0])
print(my_string[0] + 'y')
# 结果:
<class 'str'>
P
Py
结论:
- 在Python中,bytes和string都是序列类型,它们允许分片操作。
- 但是bytes中的+号是运算符,而string中+号是连接符。
从这个意义上,Python仍然保持着与C的一致性。在C中,bytes是char数组,string是以空字符结尾的char数组。+号对于前者是运算,对于后者是连接。
2. 如何用bytes表示125-255的整数型
a_num = b'\xff'
print(type(a_num[0]))
print(a_num[0])
# 结果:
<class 'int'>
255
结论:bytes类是序列,其中每个元素都是int类
字符串----encode--> 转到特定编码的的字节, 字节------decode--> 原生的字符串
字符串有decode方法,而字节是有encode方法。
3.关于decode和encode
str对象有encode方法,而bytes对象有decode方法,如何理解呢?
字符串(以某种编码存储的)----encode--> 转成特定编码的的字节,
字节(被编码的字节)------decode--> 原生的字符串。
name = '你好' # 此时"你好"是UTF-8编码存储的字符串
nameBytes = name.encode('utf-16') # 字节
nameStr = nameBytes.decode('utf-16') # 字符串
print(name)
print(nameBytes[0], nameBytes[1], nameBytes[2])
print(nameStr)
# 结果:
你好
255 254 96
你好
UTF-8编码的字节序列,总是以0xEF0xBB开头,所以打印前两位出来是的:228,189UTF-16编码的字节序列,总是以0xEF0xBB开头,所以打印前两位出来是的:255,254
因为一种格式编码的字符串可以被转换成其它的编码,所谓encode,本质就是编码的转换。python3中字符串默认是UTF-8编码格式,你可以把它encode成其它格式进行存储,当然,如果你要读取它,必须要以相应的编码格式去解码。
做个游戏
name = '你好'
nameBytes = name.encode('utf-8') # 字节
nameStr = nameBytes.decode('utf-16') # 字符串
print(name)
print(nameBytes[0], nameBytes[1], nameBytes[2])
print(nameStr)
# 结果:
你好
228 189 160
뷤붥
我把中文“你好”用utf-8编码,然后用utf-16去解码,得到韩文--- 뷤붥
Python的bytes和str的更多相关文章
- python中bytes和str
1.python中bytes和str Python3 最重要的新特性大概要算是对文本(text)和二进制数据(binary data)作了更为清晰的区分 (1)Python 3.0使用文本和(二进制) ...
- 浅析Python中bytes和str区别
本博转载自:Chown-Jane-Y的浅析Python3中的bytes和str类型 Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示, ...
- Python 3中的str和bytes类型
Python3 中的str和bytes类型 Python3最重要的新特性之一是:对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Pyt ...
- python编程之字符bytes转换str问题
之前学习bytes转换str的时候,场景比较简单,这次是python中使用subprocess模块输出Linux下的执行命令的结果,默认是bytes类型,因此输出的结果并不是我们想要的,bytes的输 ...
- python的str,unicode对象的encode和decode方法, Python中字符编码的总结和对比bytes和str
python_2.x_unicode_to_str.py a = u"中文字符"; a.encode("GBK"); #打印: '\xd6\xd0\xce\xc ...
- Effective Python(3)- 了解 bytes 与 str 的区别
Python 有两种类型可以表示字符序列 bytes:实例包含的是原始数据,即 8 位的无符号值(通常按照 ASCII 编码标准来显示) str:实例包含的是 Unicode 码点(code poin ...
- python bytes和str之间的转换
1 # bytes object 2 b = b"example" 3 4 # str object 5 s = "example" 6 7 # str to ...
- python中bytes类型转换为str类型
使用的原因:基于URL解析报文的时候,要使用str类型,但是提供的确实bytes类型,报错: TypeError: must be str, not bytes 所以就把bytes类型转换为str类型 ...
- #utf-8与gbk转换 #bytes 和str 的转换
#!/user/bin/env python # -*- coding:utf-8 -*- temp = "连接" temp_unicode = temp.decode('utf- ...
随机推荐
- kafka安装运行(docker)
zookeeper参照https://www.cnblogs.com/wintersoft/p/11128484.html mkdir /opt/kafka -pvim /opt/kafka/Dock ...
- Matlab Script to pre-process UAV123 tracking dataset
Matlab Script to pre-process UAV123 tracking dataset 2019-11-08 09:43:11 Official project page: http ...
- pdf 中画虚线
<?php require('fpdf.php'); class PDF_Dash extends FPDF { function SetDash($black=null, $white=nul ...
- 【PHP+nginx+php-fpm】探讨它们的运行机制和原理
1.PHP+nginx+php-fpm的运行机制和原理 Nginx 是非阻塞IO & IO复用模型,通过操作系统提供的类似 epoll 的功能,可以在一个线程里处理多个客户端的请求.(非阻塞, ...
- mac 下面用dd 制作u盘启动
用dd来把安装包烧到U盘的,发现U盘变小了,mac磁盘工具也不能格式化,就只好用命令行了.diskutil list #1.找到U盘的代号 比如disk1diskutil unmountDisk /d ...
- 【Python】解析Python中函数的基本使用
1.简介 在Python中定义函数的基本格式为: def <函数名>(参数列表): <函数语句> return <返回值> Python中的函数形式比较灵活,声明一 ...
- 如何用 Go 实现热重启
热重启 热重启(Zero Downtime),指新老进程无缝切换,在替换过程中可保持对 client 的服务. 原理 父进程监听重启信号 在收到重启信号后,父进程调用 fork ,同时传递 socke ...
- 使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
安装配置 VSCode [1]安装 VSCode: 下载地址:https://code.visualstudio.com/ 根据自己电脑对应的操作系统下载对应的版本即可,至于安装过程也和一般的软件一样 ...
- SDN实验---Mininet实验(玩转流表)
一:实验目的 (一)案例目的 (二)实验内容 (三)网络拓扑结构 二:OpenFlow流表实验准备 (一)使用Python设置网络拓扑 --- tree_topo.py from mininet.to ...
- JAVA SpringBoot2 整合 ueditor 的 并实现前后端分离
1,下载 jsp 版本的 百度编辑器,点击此处下载 2,解压文件,解压后目录如下 3,我们将 jsp 目录暂时移动到别的地方,剩下的文件作为一个 H5 前端项目使用,笔者这边导入到 idea 进行开发 ...