bytes与str

Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。这是件好事

不管怎样,字符串和字节包之间的界线是必然的,下面的图解非常重要,务请牢记于心:

字符串可以编码成字节包,而字节包可以解码成字符串。

>>>‘€20‘.encode(‘utf-8‘)
b‘\xe2\x82\xac20‘>>> b‘\xe2\x82\xac20‘.decode(‘utf-8‘)‘€20‘

这个问题要这么来看:字符串是文本的抽象表示。字符串由字符组成,字符则是与任何特定二进制表示无关的抽象实体。在操作字符串时,我们生活在幸福的无知之中。我们可以对字符串进行分割和分片,可以拼接和搜索字符串。我们并不关心它们内部是怎么表示的,字符串里的每个字符要用几个字节保存。只有在将字符串编码成字节包(例如,为了在信道上发送它们)或从字节包解码字符串(反向操作)时,我们才会开始关注这点。

传入encode和decode的参数是编码(或codec)。编码是一种用二进制数据表示抽象字符的方式。目前有很多种编码。上面给出的UTF-8是其中一种,下面是另一种:

>>>‘€20‘.encode(‘iso-8859-15‘)
b‘\xa420‘
>>> b‘\xa420‘.decode(‘iso-8859-15‘)
‘€20‘

编码是这个转换过程中至关重要的一部分。离了编码,bytes对象b‘\xa420‘只是一堆比特位而已。编码赋予其含义。采用不同的编码,这堆比特位的含义就会大不同:

>>> b‘\xa420‘.decode(‘windows-1255‘)
‘?20‘
时间: 2024-12-28 14:53:23

bytes与str的相关文章

python3报错:TypeError: can't concat bytes to str

有时会报错这个:TypeError: Can't convert 'bytes' object to str implicitly 解决方法:使用字节码的decode()方法. 示例: str = 'I am string' byte = b' I am bytes' s = str + byte print(s) 这时会报错:TypeError: Can't convert 'bytes' object to str implicitly 解决方法: s = str + byte.decode

Day 3 python入门拾遗篇:bytes和str转化;三元运算;进制转化

pre.ctl { font-family: "Liberation Mono", monospace } p { margin-bottom: 0.25cm; line-height: 120% } 1.bytes类型 Python3中一个很重要的特性就是对文本和二进制数据做了较为明显的划分. 文本:Unicode,由str类型表示. 二进制数据:bytes类型表示.电影文件.音频文件都由二进制文件存储. bytes类型和str类型相互转化: string------>byte

[python]bytes和str

Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> a="Hello World&q

Python菜鸟晋级02----Python3的bytes与str

Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分. 文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰.你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然).这是件好事. 不管怎样,字符串和字节包之间的界线是必然的,下面的图解非常重要,务请牢记于心: 字符串可以编码成字节包,而字节包可以解码成字

Python 3中bytes和str的分别

最近把一段py2的代码转换到py3的代码,结果运行到向socket中写数据的代码部分出现了'str' does not support the buffer interface这样一个错误. 一番搜索之后,发现py3里是严格区分了str和bytes的.怎么理解str和bytes呢?你可以认为str是一段文本,比如“abcd#%$^*&”什么的,而bytes呢,是二进制的一堆0,1的比特而已.看下面的图: 可以看到str的类型是class 'str',而str.encode()以后类型是class

Python3中内置类型bytes和str用法及byte和string之间各种编码转换

Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰.你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然). python3.0中怎么创建bytes型数据 1 2 bytes([1,2,3,4,5,6,7,8,9]) bytes("python&q

python3 中bytes与str类型

python3最重要的新特性之一就是对字符串和二进制流做了明确的区分.文本总是unicode,由str类型表示用于显示.二进制则是由bytes类型表示,用于存储和传输.bytes是byte的序列,而str是unicode的序列.Python3不会以任意隐式的方式混用str和bytes,不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然).也不能将字符串传入参数为字节流的函数(反之亦然). str与bytes之间的转换关系:str-->encode()-->bytes--->de

bytes、str与unicode

1.Python3字符序列的类型 bytes -> 原始的8位值(既字节) str -> Unicode字符 2.Python2字符序列的类型 str -> 原始的8位值(既字节) unicode -> Unicode字符 即Python3的bytes对应Python2的str,而Python3的str对应Python2的unicode 写代码的时候不要对字符编码做任何的假设. 编写两个辅助函数来进行转换. 接受str或bytes,总是返回str: def to_str(bytes

bytes 与 str 转换

Python3 最重要的特性之一就是对 字符串 和 二进制字节 做了明确且严格的区分,之所以说严格,是指二者在任何情况下不能混用: 文本总是 Unicode,由字符串 str 表示: 二进制数据由 bytes 表示: file1 = open('data.txt', 'r') out1 = file1.read() print(type(out1)) # <class 'str'> ### 以二进制方式读取 file2 = open('data.txt', 'rb') out2 = file2