Python 3.x 中字符串的内部表示是什么

新手上路,请多包涵

在 Python 3.x 中,字符串由 Unicode 序号项组成。 (请参阅下面语言参考中的引文。)Unicode 字符串的内部表示是什么?是UTF-16吗?

字符串对象的项目是 Unicode 代码单元。 Unicode 代码单元由一个项目的字符串对象表示,可以包含表示 Unicode 序数的 16 位或 32 位值(序数的最大值在 sys.maxunicode 中给出,并且取决于 Python 如何在编译时配置)。代理项对可能存在于 Unicode 对象中,并将作为两个单独的项目报告。

原文由 thebat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 606
2 个回答

Python 2.X 和 3.X 之间的 Unicode 内部表示没有变化。

它绝对不是 UTF-16。 UTF-anything 是一种面向字节的外部表示。

每个代码单元(字符、代理项等)都分配了一个范围 (0, 2 ** 21) 中的数字。这被称为它的“序数”。

真的,你引用的文档说明了一切。大多数 Python 二进制文件使用 16 位序号,这将您限制在基本多语言平面(“BMP”)上,除非您想要使用代理(如果您找不到您的毛衣并且您的指甲床已被去除 -生锈了)。要使用完整的 Unicode 指令集,您更喜欢“宽构建”(32 位宽)。

简而言之,unicode 对象的内部表示是一个 16 位无符号整数数组,或一个 32 位无符号整数数组(仅使用 21 位)。

原文由 John Machin 发布,翻译遵循 CC BY-SA 2.5 许可协议

内部表示将在实现 PEP 393 的 Python 3.3 中发生变化。新的表示形式会选择ascii、latin-1、utf-8、utf-16、utf-32中的一个或几个,一般都是试图得到一个紧凑的表示形式。

隐式转换成代理对只会在与遗留 API 对话时完成(那些只存在于 Windows 上,其中 wchar_t 是两个字节); Python 字符串将被保留。这是 发行说明

原文由 Tobu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题