首页 > 其他 > 详细

第四章文本和字节序列

时间:2020-03-08 12:37:17      阅读:75      评论:0      收藏:0      [点我收藏+]

本章内容过于恶心,选择阅读

本章首先澄清了人们对一个字符等于一个字节的误解。随着 Unicode 的 广泛使用(80% 的网站已经使用 UTF-8),我们必须把文本字符串与它 们在文件中的二进制序列表述区分开,而 Python 3 中这个区分是强制 的。

对 bytes、bytearray 和 memoryview 等二进制序列数据类型做了简要 概述之后,我们转到了编码和解码话题,通过示例展示了重要的编解码 器;随后讨论了如何避免和处理臭名昭著的 UnicodeEncodeError 和 UnicodeDecodeError,以及由于 Python 源码文件编码错误导致的 SyntaxError。

讨论源码的编码问题时,我表明了自己对非 ASCII 标识符的观点:如果 代码基的维护者想使用包含非 ASCII 字符的人类语言命名标识符,那就 去做,除非还想在 Python 2 中运行代码。但是,如果项目想吸引世界各 国的贡献者,那么标识符应该使用英语单词,此时 ASCII 就够用了。

然后,我们说明了在没有元数据的情况下检测编码的理论和实际情况: 理论上,做不到这一点;但是实际上,Chardet 包能够正确处理一些流 行的编码。随后介绍了字节序标记,这是 UTF-16 和 UTF-32 文件中常 见的编码提示,某些 UTF-8 文件中也有。

随后的一节演示了如何打开文本文件,这是一项简单的任务,不过有个 陷阱:打开文本文件时,encoding= 关键字参数不是必需的,但是应该 指定。如果没有指定编码,那么程序会想方设法生成“纯文本”,如此一 来,不一致的默认编码就会导致跨平台不兼容性。然后,我们说明了
Python 用作默认值的几个编码设置,以及如何检测它 们:locale.getpreferredencoding()、sys.getfilesystemencoding() 以及标准 I/O 文件(如 sys.stdout.encoding)的编码。对 Windows 用户来说,现实不容乐观:这些设置在同一台设备中往往有不同的值, 而且各个设置相互不兼容。而对 GNU/ Linux 和 OS X 用户来说,情况就 好多了,几乎所有地方使用的默认值都是 UTF-8。

文本比较是个异常复杂的任务,因为 Unicode 为某些字符提供了不同的

表示,所以匹配文本之前一定要先规范化。说明规范化和大小写折叠之 后,我们提供了几个实用函数,你可以根据自己的需求改编。其中有个 函数所做的是极端转换,比如去掉所有重音符号。随后,我们说明了如 何使用标准库中的 locale 模块正确地排序 Unicode 文本(有一些注意 事项);此外,还可以使用外部的 PyUCA 包,从而无需依赖捉摸不定 的区域配置。

最后简要介绍了 Unicode 数据库(包含每个字符的元数据),还简单讨 论了双模式 API(例如 re 和 os 模块,这两个模块中的某些函数可以接 受字符串或字节序列参数,返回不同但合适的结果)。

第四章文本和字节序列

原文:https://www.cnblogs.com/yuchen991/p/12441616.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!