- 译者序
- 前言
- 第1章 问答环节
- 第2章 Python 如何运行程序
- 第3章 如何运行程序
- 第4章 介绍 Python 对象类型
- 第5章 数字
- 第6章 动态类型简介
- 第7章 字符串
- 第8章 列表与字典
- 第9章 元组、文件及其他
- 第10章 Python 语句简介
- 第11章 赋值、表达式和打印
- 第12章 if 测试和语法规则
- 第13章 while 和 for 循环
- 第14章 迭代器和解析,第一部分
- 第15章 文档
- 第16章 函数基础
- 第17章 作用域
- 第18章 参数
- 第19章 函数的高级话题
- 第20章 迭代和解析,第二部分
- 第21章 模块:宏伟蓝图
- 第22章 模块代码编写基础
- 第23章 模块包
- 第24章 高级模块话题
- 第25章 OOP:宏伟蓝图
- 第27章 更多实例
- 第28章 类代码编写细节
- 第29章 运算符重载
- 第30章 类的设计
- 第31章 类的高级主题
- 第32章 异常基础
- 第34章 异常对象
- 第35章 异常的设计
- 第36章 Unicode 和字节字符串
- 字符串基础知识
- Python 的字符串类型
- 文本和二进制文件
- Python 3.0 中的字符串应用
- 转换
- 编码 Unicode 字符串
- 编码非ASCII文本
- 编码和解码非ASCII文本
- 其他 Unicode 编码技术
- 转换编码
- 在 Python 2.6 中编码 Unicode 字符串
- 源文件字符集编码声明
- 使用 Python 3.0 Bytes 对象
- 序列操作
- 创建 bytes 对象的其他方式
- 混合字符串类型
- 使用 Python 3.0(和 Python 2.6)bytearray 对象
- 使用文本文件和二进制文件
- Python 3.0 中的文本和二进制模式
- 类型和内容错误匹配
- 使用 Unicode 文件
- 在 Python 3.0 中处理 BOM
- Python 2.6 中的 Unicode 文件
- Python 3.0 中其他字符串工具的变化
- Struct二进制数据模块
- pickle对象序列化模块
- XML解析工具
- 本章小结
- 本章习题
- 习题解答
- 第37章 管理属性
- 第38章 装饰器
- 第39章 元类
- 附录A 安装和配置
- 附录B 各部分练习题的解答
- 作者介绍
- 封面介绍
习题解答
2.Python 2.6有两种主要的字符串类型:str(用于8位文本和二进制数据)以及unicode(用于宽字符文本)。str类型用于文本和二进制文件内容,unicode用于通常比8位更复杂的文本文件内容。Python 2.6(但不包括更早的版本)也有Python 3.0的bytearray类型,但它主要是一种向后兼容,而且并没有表现出Python 3.0中所表现出来的鲜明的文本/二进制区别。
3.从Python 2.6到Python 3.0的字符串类型对应并不是直接的,因为Python 2.6的str等同于Python 3.0中的str和bytes,并且Python 3.0中的str等同于Python 2.6中的str和unicode。Python 3.0中bytearray的可变性是唯一的。
4.Python 3.0的字符串类型共享了几乎所有相同的操作:方法调用、序列操作,甚至像模式匹配这样以相同方式工作的更大工具。另一方面,只有str支持字符串格式操作,并且bytearray有一组额外的操作来执行原处修改。Str和bytes类型也分别拥有编码和解码文本的方法。
5.非ASCII Unicode字符可以以十六进制转移(\xNN)和Unicode转义(\uNNNN,\UNNNNNNNN)编写到一个字符串中。在某些键盘上,一些非ASCII字符——例如,某些Latin-1字符,也可以直接录入。
6.在Python 3.0中,文本模式文件假设其文件内容是Unicode文本(即便它是ASCII),并且当读取的时候自动解码,写入的时候自动编码。对于二进制模式的文件,bytes和文件之间不经修改地转换。文本模式文件的内容通常在脚本中表示为str对象,并且二进制文件的内容表示为bytes(或bytearray)对象。文本模式文件也针对特定编码类型处理bytearray,并且输入和输出时自动在行末序列与单个\n之间转换,除非显式地关闭这一功能。二进制模式的文件不会执行任何这样的步骤。
7.要读取和平台默认编码方式不同的方式编码的文件,直接把文件编码名传递给Python 3.0的内置函数open(在Python 2.6中是codecs.open());当从文件读取数据的时候,数据将针对每种特定编码来解码。我们也可以在二进制模式中读取,并且通过给定一个编码名来手动地把字节解码成一个字符串,但是,这涉及额外的工作,并且对于多字节字符更容易出错(可能偶尔要读取字节序列的一部分)。
8.要以特定编码格式创建一个Unicode文本文件,把想要的编码名称传递给Python 3.0中的open(在Python 2.6中是codecs.open())。当字符串写入文件中的时候,将会按照每个想要的编码来进行编码。也可以手动把一个字符串编码为字节,并在二进制模式下将其写入,但是,这通常需要额外的工作。
9.ASCII文本看作是一种Unicode文本,因为其7位范围值只是大多数Unicode编码的一个子集。例如,有效的ASCII文本也是有效的Latin-1文本(Latin-1只是把一个8位字节中其余可能的值分配给额外的字符),并且是有效的UTF-8文本(UTF-8为表示更多的字符定义了一个变量-字节方案,但是ASCII字符仍然用同样的代码表示,即单个的字节)。
10.Python 3.0的字符串类型修改的影响,取决于你所使用的字符串的类型。对于那些使用简单ASCII文本的脚本,可能根本没有影响:在此情况下,str字符串类型在Python 2.6和Python 3.0中的用法相同。此外,尽管标准库中像re、struct、pickle和xml这样字符串相关的工具可能在Python 3.0和Python 2.6中技术上的用法不同,但这一修改很大程度上与大多数程序不相关,因为Python 3.0的str和bytes以及Python 2.6的str都支持几乎相同的接口。如果你处理Unicode数据,只需要直接把Python 2.6的工具集unicode和codecs.open()转换为Python 3.0的str和open。如果你处理二进制数据文件,将需要处理作为bytes对象的内容。由于它们与Python 2.6字符串具有相似的接口,所以影响再次变得很小。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论