"字符串"是个相当简单的概念:一个字符串是一个字符序列。本文记录 Python 中字符串相关内容。
基本的编解码器 {#基本的编解码器}
-
Python 自带了超过 100 种编解码器(codec, encoder/decoder),用于在 文本和字节之间相互转换。每个编解码器都有一个名称,如 'utf_8', 而且经常有几个别名,如 'utf8'、'utf-8' 和 'U8'。这些名称可以传 给 open()、str.encode()、bytes.decode() 等函数的 encoding 参数。
-
例如:
使用 3 个编解码器编码字符串"El Niño",得到的字节序 列差异很大
-
下图展示了不同编解码器对"A"和高音谱号等字符编码后得到的字节 序列。注意,后 3 种是可变长度的多字节编码。
-
图 中的星号表明,某些编码(如 ASCII 和多字节的 GB2312)不能 表示所有 Unicode 字符。然而,UTF 编码的设计目的就是处理每一个 Unicode 码位。
-
编码简介:
| 编码名称 | 介绍 | |---------------------|--------------------------------------------------------------------------------------| | latin1(即 iso8859_1) | 一种重要的编码,是其他编码的基础,例如 cp1252 和 Unicode(注意,latin1 与 cp1252 的字节值是一样的,甚至连码位也相同)。 | | cp1252 | Microsoft 制定的 latin1 超集,添加了有用的符号,例如弯引号和 €(欧元);有些 Windows 应用把它称为"ANSI",但它并不是 ANSI 标准。 | | cp437 | IBM PC 最初的字符集,包含框图符号。与后来出现的 latin1 不兼容。 | | gb2312 | 用于编码简体中文的陈旧标准;这是亚洲语言中使用较广泛的多字节编码之一。 | | utf-8 | 目前 Web 中最常见的 8 位编码; 与 ASCII 兼容(纯 ASCII 文本是 有效的 UTF-8 文本)。 | | utf-16le | UTF-16 的 16 位编码方案的一种形式;所有 UTF-16 支持通过转义 序列(称为"代理对",surrogate pair)表示超过 U+FFFF 的码位。 |
参考资料 {#参考资料}
文章链接:
https://www.zywvvd.com/notes/coding/python/fluent-python/chapter-4/python-text/python_encoder/