提问人:korangar leo 提问时间:9/20/2023 最后编辑:jpskorangar leo 更新时间:9/20/2023 访问量:53
“Unicode 编码”语句是否准确?[关闭]
Is the statement "Unicode encoding" accurate? [closed]
问:
许多教程都提到了术语“Unicode 编码”,但我觉得这不合适。
根据我的理解,Unicode只是一个字符集,而不是编码。所谓编码,应该是Unicode字符的一种存储方式,如UTF-8编码、GBK编码、GB2312编码等。它们将字符编码为字节序列,不同的编码规则可能导致不同的字节序列。所以我认为“Unicode 编码”的说法是不准确的。
答:
你是对的。Unicode 是一组系统,包括一个码位列表,以及将一系列码位转换为一系列代码单元(例如 UTF-8 的字节、UTF-16 的 16 位值等)的多种编码。
然而,从历史上看,Unicode 最初是纯粹的 16 位编码。引自维基百科,引自 1988 年的原始提案:
Unicode 旨在满足对可行、可靠的世界文本编码的需求。Unicode 可以粗略地描述为“宽体 ASCII”,它已被拉伸到 16 位,以包含世界上所有现存语言的字符。在设计得当的设计中,每个字符 16 位足以实现此目的。
最初的意图是只对通用的现代用法中的字符进行编码,规范假设 16 位可以很好地满足这些要求。然而,这是一个短视的假设,Unicode 2.0 通过将“代理对”系统引入 16 位编码来扩展码位范围。这追溯性地将Unicode 1.0(当时称为“Unicode”)编码命名为“UCS-2”,而带有代理项的新16位编码被命名为“UTF-16”。
由于这些历史因素,一些系统和文档可能仍然说“Unicode”,而它们实际上是指“UTF-16”或“UCS-2”。Windows 是一个常见的例子,我很确定我已经看到很多地方说“Unicode”但产生 UTF-16 Little Endian。
评论
sys.getdefaultencoding()
评论
decode
encode
str