字符串有两种格式,一个是字节字符串,一个是Unicode字符串。
字节字符串
在字节字符串(在Python中由bytes对象表示)中,每个字符仅代表一个字节,因此很容易与文件或外界的其他接口进行交互。
标准字符串仅用一对单引号标识为文字(如example),而字节字符串要求在第一个单引号前包含b。
标准字符串
print('你好')
字节字符串·
print(b'12')
>b'12'
字节字符串中的字符只能是ACSII表中的字符。
输出时会将b带上。
借助chr()和ord进行转化
,ord()函数,将返回与之等效的数字
,只能是单个字符
>>>ord(b'A')
>65]
#也可以迭代字节序列
>>>list(b'Example')
>[69,120,97,109,112,108,101]
,chr()会根据转入的整数值返回单个字符
,返回的只是常规的字符串。
>>>chr(65)
>A
#迭代转化
>>>[chr(o) for o in [69,120,97,109,112,108,101]]
['E','x','a','m','p','l','e']
借助struct 模块进行复杂的转化
import struct
>>>struct.pack(b'B',65)
b'A'
B指定了一个无符号的数值,因此不能是负数。范围0~255
import struct
>>>struct.pack(b'b',65)
b'A'
b指定一个有符号的字节,范围-128~127。
双字节
import struct
>>>struct.pack(b'Hh',65,65)
b'A\x00A\x00'
指定字节顺序
大端序:b'>H'
小端序:b'<H'
默认小端序
>>>print(struct.pack(b'>H',65))
>b'\x00A'
一次性打包和解包多个值
import struct
first_name = 'MARY'
last_name = 'Alsh'
age = 28
data = struct.pack(b'10s10sB',bytes(first_name,'utf8'),bytes(last_name,'utf8'),age)
print(data)
,s格式化代码结合数字前缀,可以表示读取或写入的字符串大小
Unicode字符串
转化为字节编码
编码过程本身是使用字符串的encode()方法进行管理的。只需要传入编码的
名称, encode()
方法就会返回一个字节字符串,以表示给定编码中的文本。(当然这些字符都应该是ASCII表中的。
str ='This is a example'.encode()
#str ='This is a example'.encode('ascii')
#str ='This is a example'.encode('ASCII')
print(str)
>b'This is a example'