python中bytes与bytearray以及encode与decode

一、encode与decode

1、bytes主要是给在计算机看的,string主要是给人看的

2、中间有个桥梁就是编码规则,现在大趋势是utf8

3、bytes对象是二进制,很容易转换成16进制,例如\x64

4、string就是我们看到的内容,例如‘abc‘

5、string经过编码encode,转化成二进制对象,给计算机识别

6、bytes经过反编码decode,转化成string,让我们看,但是注意反编码的编码规则是有范围,\xc8就不是utf8识别的范围

例如encode使用:

"哈哈哈".encode("utf-8")    //执行结果为:b‘\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88‘
"哈哈哈".encode("gbk")   //执行结果为b‘\xb9\xfe\xb9\xfe\xb9\xfe‘:

例如decode使用:

b‘\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88‘.decode("utf-8")   //执行结果为:‘哈哈哈‘
b‘\xb9\xfe\xb9\xfe\xb9\xfe‘.decode("gbk")     //执行结果为:‘哈哈哈‘
>>> "哈哈哈".encode("utf-8")
b‘\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88‘
>>> "哈哈哈".encode("gbk")
b‘\xb9\xfe\xb9\xfe\xb9\xfe‘
>>> b‘\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88‘.decode("utf-8")
‘哈哈哈‘
>>> b‘\xb9\xfe\xb9\xfe\xb9\xfe‘.decode("gbk")
‘哈哈哈‘

二、bytes 与 bytearray

bytes 函数返回一个新的 bytes 对象,该对象是一个 0 <= x < 256 区间内的整数不可变序列。它是 bytearray 的不可变版本。

#将数字转换为字节对象
bytes(1)     //转换后的值为:b‘\x00‘
#获取12个0填充的byte字节对象
bytes(12)       //值为:b‘\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00‘
#将数字数组转换为字节对象
bytes([1,2,3])   //值为:b‘\x01\x02\x03‘
#将字符串转换为字节对象
bytes("哈哈哈","utf-8")   //值为:b‘\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88‘
#将字符串转换为字节对象
bytes("哈哈哈","utf-8")  //值为:b‘\xb9\xfe\xb9\xfe\xb9\xfe‘
>>> bytes(1)
b‘\x00‘
>>> bytes(12)
b‘\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00‘
>>> bytes([1,2,3])
b‘\x01\x02\x03‘
>>> bytes("哈哈哈","utf-8")
b‘\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88‘
>>> bytes("哈哈哈","gbk")
b‘\xb9\xfe\xb9\xfe\xb9\xfe‘

bytearray() 方法返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。

#将数字转换为字节数组对象
bytearray(1)     //转换后的值为:bytearray(b‘\x00‘)
#获取12个0填充的byte字节数组对象
bytearray(12)       //值为:bytearray(b‘\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00‘)
#将数字数组转换为字节数组对象
bytearray([1,2,3]   //值为:bytearray(b‘\x01\x02\x03‘)
#将字符串转换为字节数组对象
bytearray("哈哈哈","utf-8")   //值为:bytearray(b‘\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88‘)
#将字符串转换为字节数组对象
bytearray("哈哈哈","gbk")  //值为:bytearray(b‘\xb9\xfe\xb9\xfe\xb9\xfe‘)
>>> bytearray(1)
bytearray(b‘\x00‘)
>>> bytearray(12)
bytearray(b‘\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00‘)
>>> bytearray([1,2,3])
bytearray(b‘\x01\x02\x03‘)
>>> bytearray("哈哈哈","utf-8")
bytearray(b‘\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88‘)
>>> bytearray("哈哈哈","gbk")
bytearray(b‘\xb9\xfe\xb9\xfe\xb9\xfe‘)

原文地址:https://www.cnblogs.com/liyuanhong/p/12167667.html

时间: 2024-08-01 06:29:31

python中bytes与bytearray以及encode与decode的相关文章

Python字符串的编码与解码(encode与decode)

字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码.

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

bytes和bytearray

bytes bytes是Python 3中特有的,Python 2 里不区分bytes和str. Python 2中 >>> type(b'xxxxx') <type 'str'> >>> type('xxxxx') <type 'str'> Python 3中 >>> type(b'xxxxx') <class 'bytes'> >>> type('xxxxx') <class 'str'&

字符、字符集、编码,以及它们python中会遇到的一些问题(上)

在看了很多的博客文章之后,总结整理得到了以下文章,非常感谢这些无私奉献的博主! 文章末尾有本文引用的文章的链接,如果有漏掉的文章引用,可以发邮件联系我,随后再次附上链接! 侵删!!! 这一部分是上篇,主要讲的是字符.字符集和字符编码的一些概念,以及他们在python中的一些简单的代码示例,偏向于概念. 下篇会说编码和解码部分,以及在python中会遇到的一些编码问题,偏向于实际应用一点. 这绝对是个源远流长的大坑,对于新手来说恶心致死(尤其是windows)........... 一.字符.字符

Python 的 encode 和 decode

记一下,备忘. Python 使用unicode,所以无论encode还是decode都是针对unicode来说的. encode:把unicode转为其他编码(gbk.utf8.gb2312等). decode:把其他编码转为unicode码. 比如字符串a为gb2312,想转为utf8: a.decode(gb2312).encode(utf8)

Python的程序结构[2] -&gt; 类/Class -&gt; 内建类 bytes 和 bytearray

内建类 bytes 和 bytearray / Built-in Type bytes and bytearray 关于内建类 Python的内建类 bytes 主要有以下几点: class bytes([source[, encoding[, errors]]]) Return a new "bytes" object, which is an immutable sequence of integers in the range 0 <= x < 256. bytes

python中的内置函数(bytearray)

返回一个新的字节数组.bytearray类是range 0 < = x < 256的一个可变序列.它有大多数可变序列的常用方法,在可变序列类型中描述,以及大多数字节类型的方法,参见字节和Bytearray操作. 可选的源参数可以用几种不同的方式来初始化数组: 如果它是一个字符串,那么您还必须给出编码(以及可选的错误)参数;bytearray()然后使用str.encode()将字符串转换为字节. 如果它是一个整数,那么数组将具有这个大小,并将用null字节初始化. 如果它是符合缓冲区接口的对象

Python 3中bytes/string的区别

原文: https://www.cnblogs.com/abclife/p/7445222.html python 3中最重要的新特性可能就是将文本(text)和二进制数据做了更清晰的区分.文本总是用unicode进行编码,以str类型表示:而二进制数据以bytes类型表示. 在python3中,不能以任何隐式方式将str和bytes类型二者混合使用.不可以将str和bytes类型进行拼接,不能在str中搜索bytes数据(反之亦然),也不能将str作为参数传入需要bytes类型参数的函数(反之

python数据l类型 ——bytes 和 bytearray

bytes和 bytearray bytes:可以看作是一组数值(0-256)(二进制) 的 str 序列bytearray :可以看作是一组数值(0-256)(二进制) 的 list 序列 bytes类型 字符串转bytes类型 # 将返回 bytes 类型 b" abc " bs1 = bytes("abc","utf-8") # 可以使用字符的16进制字符表达形式 bs2 = bytes('\x61\x62\x63',"utf-8