【发布时间】:2011-11-05 20:53:08
【问题描述】:
http://www.python.org/dev/peps/pep-0100/
PEP 100 声明内部格式 Python Unicode 保存 UTF-16 编码,但将值寻址为 UCS-2(或使用标志 --enable-unicode=ucs4 编译时的 UCS-4)。
为什么不选择 UTF-16(可变长度格式)而不是 UCS-2(固定长度)?
虽然这两种编码基本相同,但 UTF-16 在 PEP-100 发布时(2000 年 3 月)已经 4 岁了。 Python Unicode 是否旨在解决向后兼容性问题?
我真的很好奇为什么 Python 的内部格式是使用这种(看似)混合方法在内部存储编码数据来实现的?
问我的问题的更好方法可能是:是否有人引用或链接来自官方文档,具体说明为什么 PEP 100 选择将 UTF-16 视为 UCS-2 而不是使用 UTF-16?
【问题讨论】:
-
更好的是,为什么不使用 UTF-8 或 UTF-32?
-
我也希望看到 UTF-8,但我的猜测是,自从 RFC 2279 ietf.org/rfc/rfc2279.txt 未发布以来,当时 UTF-8 可能有点过于前沿直到 1998 年 1 月。我对 UTF-32 知之甚少,但我怀疑它不是出于存储问题而选择的。不错的评论:)
-
注意:使用 UTF-8 处理长度、索引和切片的字符术语比 UTF-16 更困难且效率低下。使用 UTF-8 作为 internal 格式(相对于 external 格式)不是一个好主意。
-
@eryksun 不。我在问为什么选择 UCS-2 而不是 UTF-16。虽然我很想了解更多关于“为什么它不是为了正确处理 UTF-16 代理对而编写的”。
-
@JohnMachin 为什么 utf-8 “使用 UTF-8 在长度、索引和切片方面更加困难和低效”?
标签: python unicode encoding utf-16 ucs2