【第三章】Python基础字节序列之编码、解码,ASCII与初始化
字节序列
Python3 引入两个新的类型bytes、bytearray。
bytes不可变字节序列;bytearray是可变字节数组。
编码与解码
-
编码:str => bytes,将字符串这个字符序列使用指定字符集encode编码为一个个字节组成的序列 bytes, str是python中使用的是unicode编码
-
解码:bytes或bytearray => str,将一个个字节按照某种指定的字符集解码为一个个字符串组成的 字符串
输入:'啊'.encode() #unicode--> encode --> utf-8
输出:b'\xe5\x95\x8a'
输入:b'\xe5\x95\x8a'.decode()
输出:'啊'
输入:'啊'.encode('gbk')
输出:b'\xb0\xa1'
ASCII
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁 字母的一套单字节编码系统
熟记:
-
\x00是ASCII表中第一项,C语言中的字符串结束符
-
\t、\x09,表示tab字符
-
\r\n是\x0d\x0a
-
\x30~\x39 字符0~9,\x31是字符1
-
\x41对应十进制65,表示A
-
\x61对应十进制97,表示a
注意:这里的1指定是字符1,不是数字1 UTF-8、GBK都兼容了ASCII
00000000 0 null '\x00'
00000000 init 0 str null ascii
00001001 '\x09' '\t'
00001010 '\x0a' '\n'
13 0x0D '\x0d' '\r'
65 0x41 '\x41' 'A' #65//16=4 65%16=1
97 0x61 '\x61' 'a'
48 0x30 '\x30' '0'
49 0x31 '0x31' '1'
57 0x39 '\x39' '9'
'a\x09b\x0d\x0ac \x31\x41\x61' # 表示什么? 'a\tb\r\nc 1Aa'
'A' > 'a' # 谁大? 'a'大
Bytes初始化
-
bytes() 空bytes
-
bytes(int) 指定字节的bytes,被0填充
-
bytes(iterable_of_ints) -> bytes [0,255]的int组成的可迭代对象
-
bytes(string, encoding[, errors]) -> bytes 等价于string.encode()
-
bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer 从一个字节序列或者buffer复制出一个新的不可变的bytes对象
-
使用b前缀定义
-
只允许基本ASCII使用字符形式b'abc9'
-
使用16进制表示b"\x41\x61"
-
bytes类型和str类型类似,都是不可变类型,操作方法类似。
print(b'abcd'[2]) # 返回int,指定是本字节对应的十进制数
x = b'\t\x09'
print(x, len(x))
y = br'\t\x09'
print(y, len(y))
输入:'啊'.encode(),b'\xe5\x95\x8a'.decode()
输出:(b'\xe5\x95\x8a', '啊')
输入:bytes([1,9,10,13,0x41]),bytes(range(0x61,0x64))
输出:(b'\x01\t\n\rA',b'abc')
输入:bytes(b'abc')
输出:b'abc'
输入:bytes(5)
输出:b'\x00\x00\x00\x00\x00'
输入:b1 = bytes(range(0x61,0x64))
输出:b1[0] = 97
bytearray初始化
-
bytearray() 空bytearray
-
bytearray(int) 指定字节的bytearray,被0填充
-
bytearray(iterable_of_ints) -> bytearray [0,255]的int组成的可迭代对象
-
bytearray(string, encoding[, errors]) -> bytearray 近似string.encode(),不过返回可变对象
-
bytearray(bytes_or_buffer) 从一个字节序列或者buffer复制出一个新的可变的bytearray对象
b前缀表示的是bytes,不是bytearray类型 由于bytearray类型是可变数组,所以,类似列表。
-
append(int) 尾部追加一个元素
-
insert(index, int) 在指定索引位置插入元素
-
extend(iterable_of_ints) 将一个可迭代的整数集合追加到当前bytearray
-
pop(index=-1) 从指定索引上移除元素,默认从尾部移除
-
remove(value) 找到第一个value移除,找不到抛ValueError异常
-
注意:上述方法若需要使用int类型,值在[0, 255]
-
clear() 清空bytearray
-
reverse() 翻转bytearray,就地修改
b = bytearray()
b.append(97)
b.append(99)
b.insert(1,98)
b.extend([65,66,67])
b.remove(66)
b.pop()
b.reverse()
print(b) # 输出什么
b.clear()
原文地址:https://blog.csdn.net/weixin_74814027/article/details/144016634
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!