python学习手册(第4版)-第8部分
第八部分
高级话题
第36章
Unicode和字节字符串
在本书的核心类型部分关于字符串的一章中 (第 章),我有意地限制了大多数
7 P y t h o n
程序员需要了解的字符串话题的子集的范围。因为大多数程序员只是处理像A S C I I这样
的文本的简单形式,他们快乐地使用着Python 的基本的 字符串类型及其相关的操作,
str
并且不需要掌握更加高级的字符串概念。实际上,这样的程序员很大程度上可以忽略
Python 3.0 中的字符串的变化,并且继续使用他们过去所使用的字符串。
另一方面,一些程序员处理更加专业的数据类型:非A S C I I 的字符串集、图像文件内
容,等等。对于这些程序员 (以及其他可能某一天加入这一队伍的程序员),在本章
中,我们将介绍P y t h on字符串的其他内容,并且探讨P y t h on字符串模型中一些较为高级
的话题。
特别是,我们将介绍Python支持的Unicode文本的基础知识——在国际化应用程序中使用
的宽字符字符串,以及二进制数据——表示绝对的字节值的字符串。我们将看到,高级
的字符串表示法在Python 当前版本中已经产生了分歧:
• Python 3.0为二进制数据提供了一种替代字符串类型,并且在其常规的字符串类型
中支持 文本 ( 看作 的一种简单类型)。
Unicode ASCII Unicode
• Python 2.6为非ASCII Unicode文本提供了一种替代字符串类型,并且在其常规的字
符串类型中支持简单文本和二进制数据。
此外,由于P y t h o n 的字符串模式对于如何处理非A SC I I文件有着直接的影响,我们还将
在这里介绍相关话题的基础知识。最后,我们还将简单地看看一些高级字符串和二进制
工具,例如模式匹配、对象pickle化、二进制数据包装和XML解析,以及Python 3.0 的字
符串变化对它们产生影响的方式。
893
正式来说,本章是关于高级话题的一章,因为并不是所有的程序员都需要深入U n i c o d e
编码或二进制数据的世界。如果你需要关注处理这两种形式,那么,你将会发现P y t h o n
的字符串模式提供了所需的支持。
Python 3.0 中的字符串修改
P y t h o n 3.0 中最引入注目的修改之一,就是字符串对象类型的变化。简而言之,P y t h o n
2.X 的 和 类型已经融入了Python 3.0 的 和 类型,并且增加了一种新的
str unicode str bytes
可变的类型bytearray。bytearray类型在Python 2.6 中也可以使用 (但在更早的版本中
不能用),但是,它在Python 3.0 中得到完全支持,并且不像是Python 2.6 中那样清楚地
区分文本和二进制内容。
特别是,如果我们处理本质上是U n i c o d e或二进制的数据,这些修改对于代码可能会有
切实的影响。实际上,作为首要的一般性规则,我们需要如何关注这一话题,很大程度
上取决于遇到如下的哪种情况:
• 如果处理非ASCII Unicode文本,例如,在国际化应用程序或某些XML解析器的结
果这样的环境中,你将会发现P y t h o n 3.0 中对文本编码的支持是不同的,但是可能
比Python 2.6 中的支持更加直接、易用和无缝。
• 如果处理二进制数据,例如,使用st r u c t模块处理的图形或音频文件的形式或打包
的数据,我们需要理解Python 3.0 中新的bytes对