Python 标准数据类型:Bytes

Bytes 对象是由单个字节作为基本元素(8位,取值范围 0-255)组成的序列,为不可变对象。

Bytes 对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定。我们可以通过调用 bytes() 类(没错,它是类,不是函数)生成 bytes 实例,其值形式为 b’xxxxx’,其中 ‘xxxxx’ 为一至多个转义的十六进制字符串(单个 x 的形式为:\xHH,其中 \x 为小写的十六进制转义字符,HH 为二位十六进制数)组成的序列,每个十六进制数代表一个字节(八位二进制数,取值范围 0-255),对于同一个字符串如果采用不同的编码方式生成 bytes 对象,就会形成不同的值:

这里写图片描述

比如上例中的 a 字符串对象,其十进制 unicode 值为 24464,分别使用 ‘utf-8’ 和 ‘gb2312’ 两种编码格式将其转换成 bytes 对象 b 和 c ,结果 b 和 c 的值是完全不同的,由于基于的编码格式不一致, b c 长度甚至都不相同,前者有 3 个字节长度,后者有 2 个字节长度:

这里写图片描述

另外,对于 ASCII 字符串,可以直接使用 b’xxxx’ 赋值创建 bytes 实例,但对于非 ASCII 编码的字符则不能通过这种方式创建 bytes 实例:

这里写图片描述

由于 bytes 是序列,因此我们可以通过索引或切片访问它的元素:

这里写图片描述

可以发现如果以单个索引的形式访问元素,其会直接返回单个字节的十进制整数,而以序列片段的形式访问时,则返回相应的十六进制字符序列。

对于 bytes 实例,如果需要还原成相应的字符串,则需要借助内置的解码函数 decode(),借助相应的编码格式解码为正常字符串对象,如果采用错误的编码格式解码,则有可能发生错误:

这里写图片描述

扩展

对于urllib打开网页返回的数据也是bytes数据,但是在输出后就有点感觉很好奇,Python到底是怎么处理的。

import urllib.request as req

response = req.urlopen("http://www.baidu.com")
page = response.read() #返回的Bytes型数据
print(page)

#输出内容
'''
b'<!DOCTYPE html>\n<!--STATUS OK-->\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r.......'
'''

为什么Bytes型数据输出来不是 0-255 的数字,反而英文Byte输出是英文,中文Byte输出是十六进制???

但是结果就是这样,这就是我们看到的,很容易能够知道,Python就是做了这样的处理。


每天抽烟的几分钟冥想,最能让我知道,谁在默默地雪中送炭,谁在背后下套捅刀子!!!,在我心里,不痛快的事情它会过去,但是不代表我会忘记!!!

最后,男人就得有男人的样子,你要知道,这个社会还是男人的。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值