《流畅的Python》读书笔记6(第四章:文本与字节序列)

154 阅读1分钟

Text versus bytes

Python3明确区分了人类可读的文本字符串和原始的字节序列。 python2与python3中的一个对应关系:

image.png

4.1 字符问题

  • Unicode 是 字符集
  • UTF-8 是编码规则 其中:
  • 字符集: 为每一个字符分配一个唯一的ID(码位:code point)
  • 编码规则: 将码位转换为字节序列的规则

示例4.1 编码和解码

>>> s = 'cafの'

>>> len(s)

4

>>> b = s.encode('utf8')

>>> b

b'caf\xe3\x81\xae'

>>> type(b)

<class 'bytes'>

>>> len(b) # 字节序列b有6个字节

6

4.2 字节概要

Python内置了两种基本的二进制序列类型:不可变的bytes类型和可变的bytearray类型。

bytes和bytearray对象的各个元素是介于0~255(含)之间的整数。

示例4-2 bytes和bytearray对象

>>> s = bytes('cafの', encoding='utf_8')

>>> s

b'caf\xe3\x81\xae'

>>> s[0]

99

>>> s[:1] #bytes对象的切片还是bytes对象

b'c'

>>> s_arr = bytearray(s)

>>> s_arr

bytearray(b'caf\xe3\x81\xae')

>>> s_arr[-1:]

bytearray(b'\xae')

4.3 基本的编解码器

编解码器用于在文本和字节之间相互转换。每个编解码器都有一个名称,如‘utf_8’,而且经常有几个别名,若'utf8','utf-8','U8'.

>>> s = 'cafの'

>>> b = s.encode('utf8')

>>> c = s.encode('utf-8')

>>> d = s.encode('utf_8')

>>> e = s.encode('U8')

>>> b,c,d,e

(b'caf\xe3\x81\xae', b'caf\xe3\x81\xae', b'caf\xe3\x81\xae', b'caf\xe3\x81\xae')

4.4 了解编解码问题

4.4.4 如何找出字节序列的编码

不能。必须有人告诉你

参考:www.cnblogs.com/yangmingxia…