为什么Python的Unicode内部格式按照PEP 100的描述实现?

4 投票
1 回答
620 浏览
提问于 2025-04-17 05:43

http://www.python.org/dev/peps/pep-0100/

PEP 100 说明了 Python 的内部格式,也就是 Python Unicode,实际上是用 UTF-16 编码的,但在处理这些值时,把它们当作 UCS-2 来看待(如果用 --enable-unicode=ucs4 这个选项编译的话,就会变成 UCS-4)。

那么,为什么不直接选择 UTF-16(这种编码长度是可变的)而是 UCS-2(这种编码长度是固定的)呢?

虽然这两种编码在大部分情况下是相似的,但在 PEP 100 发布的时候(2000年3月),UTF-16 已经存在了四年。Python Unicode 是不是为了兼容旧版本而这样设计的呢?

我其实只是好奇,为什么 Python 的内部格式会用这种(看起来像是)混合的方式来存储编码数据?

更好的提问方式可能是:有没有人能提供一个引用或链接,里面有官方文件的说明,具体解释为什么 PEP 100 选择把 UTF-16 当作 UCS-2 而不是直接使用 UTF-16?

1 个回答

1

再往下读一点:“UCS-2和UTF-16在所有当前定义的Unicode字符点上是一样的”……这句话在2000年写PEP的时候是对的。当时的初始实现只涵盖了基本多语言平面(BMP),也就是前64K个字符编码。

撰写回答