《流畅的Python》中如何处理Python文本与字节序列转换?

2026-05-21 18:154阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计4376个文字,预计阅读时间需要18分钟。

《流畅的Python》中如何处理Python文本与字节序列转换?

字符问题+从Python3的str对象获取的元素是Unicode字符,相当于从Python2的unicode对象中获取的元素,而不是从Python2的str对象中获取的原始字节序列。


字符问题

从Python3的str对象获取的元素时Unicode字符,相当于从Python2的unicode对象中获取的元素,而不是从Python2的str对象中获取的原始字节序列。

把码位(字符的标识)转换成字节序列的过程是编码;把字节序列转换成码位的过程是解码:

>>> s = 'café'
>>> len(s)#4个Unicode字符
4
>>> b = s.encode('utf8')#使用UTF-8把str对象编码成bytes对象
>>> b
b'caf\xc3\xa9' #bytes对象以b开头
>>> len(b)# 字节序列b有5个字节(UTF-8中,"é"的码位编码成两个字节)
5
>>> b.decode('utf8')#解码成str对象
'café'

虽然 Python 3 的 str 类型基本相当于 Python 2 的 unicode 类型,只不
过是换了个新名称,但是 Python 3 的 bytes 类型却不是把 str 类型换
个名称那么简单,而且还有关系紧密的 bytearray 类型。

字节概要

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

阅读全文

本文共计4376个文字,预计阅读时间需要18分钟。

《流畅的Python》中如何处理Python文本与字节序列转换?

字符问题+从Python3的str对象获取的元素是Unicode字符,相当于从Python2的unicode对象中获取的元素,而不是从Python2的str对象中获取的原始字节序列。


字符问题

从Python3的str对象获取的元素时Unicode字符,相当于从Python2的unicode对象中获取的元素,而不是从Python2的str对象中获取的原始字节序列。

把码位(字符的标识)转换成字节序列的过程是编码;把字节序列转换成码位的过程是解码:

>>> s = 'café'
>>> len(s)#4个Unicode字符
4
>>> b = s.encode('utf8')#使用UTF-8把str对象编码成bytes对象
>>> b
b'caf\xc3\xa9' #bytes对象以b开头
>>> len(b)# 字节序列b有5个字节(UTF-8中,"é"的码位编码成两个字节)
5
>>> b.decode('utf8')#解码成str对象
'café'

虽然 Python 3 的 str 类型基本相当于 Python 2 的 unicode 类型,只不
过是换了个新名称,但是 Python 3 的 bytes 类型却不是把 str 类型换
个名称那么简单,而且还有关系紧密的 bytearray 类型。

字节概要

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

阅读全文