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是解码】

 

posted @ 2019-05-27 05:06  天子骄龙  阅读(304)  评论(0编辑  收藏  举报