"字符串"是个相当简单的概念:一个字符串是一个字符序列。本文记录 Python 中字符串相关内容。
Unicode 标准 {#Unicode-标准}
从 Python 3 的 str 对象中获取的元素是 Unicode 字符
-
Unicode 标准把字符的标识和具体的字节表述进行了如下的明确区分。
- 字符的标识,即码位,是 0~1 114 111 的数字(十进制),在 Unicode 标准中以 4~6 个十六进制数字表示,而且加前缀"U+"。例 如,字母 A 的码位是 U+0041,欧元符号的码位是 U+20AC,高音 谱号的码位是 U+1D11E。在 Unicode 6.3 中(这是 Python 3.4 使用的 标准),约 10% 的有效码位有对应的字符。
- 字符的具体表述取决于所用的编码。编码是在码位和字节序列之间 转换时使用的算法。在 UTF-8 编码中,A(U+0041)的码位编码成 单个字节 \x41,而在 UTF-16LE 编码中编码成两个字节 \x41\x00。再举个例子,欧元符号(U+20AC)在 UTF-8 编码中是 三个字节------\xe2\x82\xac,而在 UTF-16LE 中编码成两个字 节:\xac\x20。
-
把码位转换成字节序列的过程是编码;把字节序列转换成码位的过程是解码。
字节概要 {#字节概要}
-
Python 内置了两种基本的二进制序列类型:Python 3 引入的不可变 bytes 类型和 Python 2.6 添加的可变 bytearray 类型。
-
bytes 或 bytearray 对象的各个元素是介于 0~255(含)之间的整 数,而不像 Python 2 的 str 对象那样是单个的字符。然而,二进制序列 的切片始终是同一类型的二进制序列,包括长度为 1 的切片。
-
my_bytes[0] 获取的是一个整数,而 my_bytes[:1] 返回的 是一个长度为 1 的 bytes 对象------这一点应该会让人意 外。s[0] == s[:1] 只对 str 这个序列类型成立。不过,str 类 型的这个行为十分罕见。对其他各个序列类型来说,s[i] 返回一 个元素,而 s[i:i+1] 返回一个相同类型的序列,里面是 s[i] 元素。
参考资料 {#参考资料}
文章链接:
https://www.zywvvd.com/notes/coding/python/fluent-python/chapter-4/python-text/python_text/