本文最后更新于:2024年5月7日 下午
“字符串”是个相当简单的概念:一个字符串是一个字符序列。本文记录 Python 中字符串相关内容。
基本的编解码器
-
Python 自带了超过 100 种编解码器(codec, encoder/decoder),用于在 文本和字节之间相互转换。每个编解码器都有一个名称,如 ‘utf_8’, 而且经常有几个别名,如 ‘utf8’、‘utf-8’ 和 ‘U8’。这些名称可以传 给 open()、str.encode()、bytes.decode() 等函数的 encoding 参数。
-
例如:
使用 3 个编解码器编码字符串“El Niño”,得到的字节序 列差异很大
1
2
3
4
5
6
7for codec in ['latin_1', 'utf_8', 'utf_16']:
print(codec, 'El Niño'.encode(codec), sep='\t')
-->
latin_1 b'El Ni\xf1o'
utf_8 b'El Ni\xc3\xb1o'
utf_16 b'\xff\xfeE\x00l\x00 \x00N\x00i\x00\xf1\x00o\x00' -
下图展示了不同编解码器对“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/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付
Python 字符编解码器
https://www.zywvvd.com/notes/coding/python/fluent-python/chapter-4/python-text/python_encoder/