Python 2如何在内部表示Unicode?

时间:2015-06-04 06:17:41

标签: python unicode

当我在Unicode上阅读此Python2's official page时,它说

  

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

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

1 个答案:

答案 0 :(得分:4)

此语句仅表示存在使用这两种编码的基础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的实现。