python-编码
字符串在python3的内存中是以Unicode(32位)编码的
utf-8
一个英文字母占1个字节,一个汉字占3字节
gbk
一个英文字母占1个字节,一个汉字占2字节
将字符串转换成指定编码
方法一
s='liming' s1=s.encode('utf-8') #将字符串转换成指定编码 print(s1) s1=s.encode('gbk') print(s1)
方法二
s='liming' s1=bytes(s,encoding='utf-8') #将字符串转换成指定编码 print(s1)
python3严格区分bytes和bytearray,bytes是不可变数据类型,而bytearray像名称一样可使用append等方法
bytearray可变字节数组
bytearray 是 Python 的一个内置类,它提供了一个可变序列的字节数组
bytearray 数组的元素必须是0-255之间的整数,这些整数对应于ASCII字符集中的数字。下图是部分ASCII字符:
bytearray 是可变的,可修改其内容,而 bytes 是不可变的,不能修改
#从整数序列创建 ba1 = bytearray([65, 66, 67]) #从ASCII表得知数字三个数字对应字符 'ABC' print(ba1) #bytearray(b'ABC') #从字节串创建 ba2 = bytearray(b'ABC') print(ba2) #bytearray(b'ABC') #从字符串创建(需要指定编码) ba3 = bytearray('ABC', 'utf-8') print(ba3) #bytearray(b'ABC') #初始化指定大小的字节数组,并用0填充 ba4 = bytearray(5) # 代表5个0 print(ba4) #bytearray(b'\x00\x00\x00\x00\x00') s_array = bytearray(b"Hello world") print(s_array) for i in s_array: print(f'字节码对应的数字:{i} 转换为字符:{chr(i)}') """ bytearray(b'Hello world') 字节码对应的数字:72 转换为字符:H 字节码对应的数字:101 转换为字符:e 字节码对应的数字:108 转换为字符:l 字节码对应的数字:108 转换为字符:l 字节码对应的数字:111 转换为字符:o 字节码对应的数字:32 转换为字符: 字节码对应的数字:119 转换为字符:w 字节码对应的数字:111 转换为字符:o 字节码对应的数字:114 转换为字符:r 字节码对应的数字:108 转换为字符:l 字节码对应的数字:100 转换为字符:d """
ba2 = bytearray(b'ABC') #append(int): 追加一个字节到末尾 ba2.append(104) #增加一个字符h,对应数字是104 print(ba2) #bytearray(b'ABCh') s_array=bytearray(b'lm') s_array.extend([104,105]) #追加多个字节到末尾 print(s_array) #bytearray(b'lmhi')
s_array=bytearray(b'liming') s_array.insert(3,104) #在指定索引处插入一个字节 print(s_array) #bytearray(b'limhing')
s_array=bytearray(b'limHing') s_array.remove(72) #移除首次出现的指定字节 #移除字符H,数字对应72 print(s_array) #bytearray(b'liming')
#pop([index]): 移除并返回指定索引处的字节(默认为最后一个) s_array=bytearray(b'liming') popvalue = s_array.pop() print(popvalue) print(s_array)
s_array=bytearray(b'liming') n=s_array.find(b'i') #返回子字节序列首次出现的索引,如果没有找到则返回-1 print(n) #1
s_array=bytearray(b'liming') n=s_array.index(100) #返回子字节序列首次出现的索引,如果没有找到则引发 ValueError print(n)
s_array=bytearray(b'limingliming') n=s_array.count(b'li') #返回子字节序列出现的次数 print(n) #2
s_array=bytearray(b'limingHlimingH') s_array_new = s_array.replace(b'H',b'Q') #修改字符H为字符Q,,不修改原字节数组 print(s_array_new) #bytearray(b'limingQlimingQ') s_array_new = s_array.replace(b'gH',b'aQ') #修改gH为字符aQ,,不修改原字节数组 print(s_array_new) #bytearray(b'liminaQliminaQ')
编码转换成字符
s2=s1.decode()
s1是编码
s2是字符串
【encode是编码 decode是解码】