python教程

当前位置:首页 > python进阶 > 当前文章

python进阶

3种方法创建字节串bytes及其使用

2021-11-19 176赞 老董笔记

  需要了解字符集、字符编码、Unicode、码点值、UTF-8编码、GBK编码这种杂七杂八概念的可以参考:字符集与编码的区别

  在python3的世界里,字符串str数据类型在内存中会统一转为unicode类型存储。python3还有一种字节串bytes类型,字节串可以由字符串按照某种编码方式编码得到。

print(bin(ord('我'))) # Unicode码点值
byte_s = '我'.encode('utf-8') # 按utf-8编码得到的字节值
print(byte_s)
print(type(byte_s))
0b110001000010001
b'我'
<class 'bytes'>

  bytes对象的操作是以字节byte为单位,每一个byte的值只能是0到255。普通字符串是以人眼可读的字符为单位操作。bytes类型和str类型支持的方基本相同,我们看下字节串的遍历和len操作:

byte_s = 'python'.encode('utf-8')
print(byte_s)
print(len(byte_s))
for i in byte_s:
  print(hex(i))

print('------------------')
byte_s = '老董笔记'.encode('utf-8')
print(byte_s)
print(len(byte_s))
for i in byte_s:
  print(hex(i))
b'python'
6
0x70
0x79
0x74
0x68
0x6f
0x6e
------------------
b'老董笔记'
12
0xe8
0x80
0x81
0xe8
0x91
0xa3
0xe7
0xac
0x94
0xe8
0xae
0xb0

  除了通过encode函数创建之外,还有其他的方式创建bytes字节数据。

  1、对于ASCII字符,可以通过 b'' 这种字面量方式创建 bytes数据。

  2、不管是ASCII字符还是非ASCII字符都可以通过内置函数bytes()来创建。

print(b'hello')
print(bytes('二手房',encoding='UTF-8'))
b'hello'
b'二手房'

  如果要把bytes字节数据转为字符串可以使用decode方法。bytes对象也是不可变类型,不可以被原地修改。

bs = bytes('房',encoding='UTF-8')
print(bs)
print(bs.decode('utf-8'))
b'房'
房

bs = b'rent'
bs[0] = 12
TypeError: 'bytes' object does not support item assignment

  在日常使用中,有1次在对1个接口post数据时候,post的数据含中文导致一直报错,后来转为bytes字节去post则没问题了!

感兴趣直接点击图片获取>>

文章评论

3种方法创建字节串bytes及其使用文章写得不错,值得赞赏