自学内容网 自学内容网

【第三章】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,美国信息交换标准代码)是基于拉丁 字母的一套单字节编码系统

熟记:

  1. \x00是ASCII表中第一项,C语言中的字符串结束符

  2. \t、\x09,表示tab字符

  3. \r\n是\x0d\x0a

  4. \x30~\x39 字符0~9,\x31是字符1

  5. \x41对应十进制65,表示A

  6. \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)!