【问题标题】:How does Python 2 represent Unicode internally?Python 2 如何在内部表示 Unicode?
【发布时间】:2015-06-04 06:17:40
【问题描述】:

当我在 Unicode 上读到这个 ​​Python2's official page 时,它说

在底层,Python 将 Unicode 字符串表示为 16 位或 32 位整数,具体取决于 Python 解释器的编译方式。

上面这句话是什么意思?这是否意味着 Python2 有自己特殊的 Unicode 编码?如果是这样,为什么不直接使用 UTF-8?

【问题讨论】:

标签: python unicode


【解决方案1】:

此声明仅表示存在使用这两种编码的底层 C 代码,并且根据具体情况,选择任一变体。这些情况通常是用户选择、编译器和操作系统。

现在,出于可能的原因,有理由不使用 UTF-8:

  • 首先,索引到 UTF-8 字符串的复杂度为 O(n),而 UTF-32/UCS4 的复杂度为 O(1)。虽然这与流数据无关,而且 UTF-8 实际上可以节省传输或存储空间,但内存中的处理更方便,每个 Unicode 代码点一个字符。
  • 其次,每个代码点使用一个字符可以很好地转换为 Python 本身以其语言提供的 API,因此这是一个自然的选择。
  • 在 MS Windows 平台上,UI 和文件系统的本机编码是 UTF-16,因此使用该编码可提供与该平台的无缝集成。
  • 在某些编译器上,wchar_t 实际上是 16 位类型,因此如果您想在其中使用 32 位类型,则必须为您自己发明的字符类型重新实现各种函数。放弃对 Unicode BMP 以上的任何内容的支持或将代理序列泄漏到 Python API 中是一种合理的折衷方案(但不幸的是,这种折衷方案仍然存在)。

请注意,这些都是可能的原因,我并不声称这些适用于 Python 的实现。

【讨论】:

    猜你喜欢
    • 2014-11-22
    • 2015-08-09
    • 1970-01-01
    • 2020-07-23
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多