人类使用文本,计算机使用字节序列。1
——Esther Nam 和 Travis Fischer
“Character Encoding and Unicode in Python”
1PyCon 2014,“Character Encoding and Unicode in Python”演讲的第 12 张幻灯片 [ 幻灯片(http://www.slideshare.net/fischertrav/character-encoding-unicode-how-to-with-dignity-33352863),视频(http://pyvideo.org/pycon-us-2014/character-encoding-and-unicode-in-python.html)]。
Python 3 明确区分了人类可读的文本字符串和原始的字节序列。隐式地把字节序列转换成 Unicode 文本已成过去。本章将要讨论 Unicode 字符串、二进制序列,以及在二者之间转换时使用的编码。
深入理解 Unicode 对你可能十分重要,也可能无关紧要,这取决于 Python 编程的场景。说到底,本章涵盖的问题对只处理 ASCII 文本的程序员没有影响。但是即便如此,也不能避而不谈字符串和字节序列的区别。此外,你会发现专门的二进制序列类型所提供的功能,有些是 Python 2 中“全功能”的 str 类型不具有的。
本章将讨论下述话题:
字符、码位和字节表述
bytes、bytearray 和 memoryview 等二进制序列的独特特性
全部 Unicode 和陈旧字符集的编解码器
避免和处理编码错误
处理文本文件的最佳实践
默认编码的陷阱和标准 I/O 的问题
规范化 Unicode 文本,进行安全的比较
规范化、大小写折叠和暴力移除音调符号的实用函数
使用 locale 模块和 PyUCA 库正确地排序 Unicode 文本
Unicode 数据库中的字符元数据
能处理字符串和字节序列的双模式 API
接下来先从字符、码位和字节序列开始。