Python 2如何在内部表示Unicode?

Python 2如何在内部表示Unicode?,python,unicode,Python,Unicode,当我在Unicode上读到这篇文章时,它说 根据Python解释器的编译方式,Python将Unicode字符串表示为16位或32位整数 上面这句话是什么意思?这是否意味着Python2有自己独特的Unicode编码?如果是这样的话,为什么不直接使用UTF-8呢?这句话仅仅意味着存在同时使用这两种编码的底层C代码,并且根据具体情况,可以选择任何一种变体。这些情况通常是用户选择、编译器和操作系统 现在,出于可能的理由,有理由不使用UTF-8: 首先也是最重要的一点,索引到UTF-8字符串的复杂度

当我在Unicode上读到这篇文章时,它说

根据Python解释器的编译方式,Python将Unicode字符串表示为16位或32位整数


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

这句话仅仅意味着存在同时使用这两种编码的底层C代码,并且根据具体情况,可以选择任何一种变体。这些情况通常是用户选择、编译器和操作系统

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

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

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

这句话仅仅意味着存在同时使用这两种编码的底层C代码,并且根据具体情况,可以选择任何一种变体。这些情况通常是用户选择、编译器和操作系统

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

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

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

Python 2基本上是这样做的-它将Unicode内部存储为UTF-16这里有很多关于实现细节的讨论->Python 2基本上是这样做的-它将Unicode内部存储为UTF-16这里有很多关于实现细节的讨论->