为什么Python的Unicode内部格式按照PEP 100的描述实现?
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个字符编码。