在 Python 3.x 中,字符串由 Unicode 序号项组成。 (请参阅下面语言参考中的引文。)Unicode 字符串的内部表示是什么?是UTF-16吗?
字符串对象的项目是 Unicode 代码单元。 Unicode 代码单元由一个项目的字符串对象表示,可以包含表示 Unicode 序数的 16 位或 32 位值(序数的最大值在 sys.maxunicode 中给出,并且取决于 Python 如何在编译时配置)。代理项对可能存在于 Unicode 对象中,并将作为两个单独的项目报告。
原文由 thebat 发布,翻译遵循 CC BY-SA 4.0 许可协议
Python 2.X 和 3.X 之间的 Unicode 内部表示没有变化。
它绝对不是 UTF-16。 UTF-anything 是一种面向字节的外部表示。
每个代码单元(字符、代理项等)都分配了一个范围 (0, 2 ** 21) 中的数字。这被称为它的“序数”。
真的,你引用的文档说明了一切。大多数 Python 二进制文件使用 16 位序号,这将您限制在基本多语言平面(“BMP”)上,除非您想要使用代理(如果您找不到您的毛衣并且您的指甲床已被去除 -生锈了)。要使用完整的 Unicode 指令集,您更喜欢“宽构建”(32 位宽)。
简而言之,unicode 对象的内部表示是一个 16 位无符号整数数组,或一个 32 位无符号整数数组(仅使用 21 位)。