unicode - Unicode代码点和Unicode标量之间有什么区别?

标签 unicode terminology

我看到在很多情况下两者(似乎)可以互换使用-它们是相同还是不同?这似乎还取决于该语言是在谈论UTF-8(例如Rust)还是UTF-16(例如Java / Haskell)。代码点/标量的区别是否某种程度上取决于编码方案?

最佳答案

首先让我们看一下definitions D9, D10 and D10a, Section 3.4, Characters and Encoding


D9 Unicode代码空间:
从0到10FFFF16的整数范围。

D10代码点:
Unicode代码空间中的任何值。

•代码点也称为
代码位置。

...

D10a代码点类型:
标准中的七个基本代码点类别之一:
图形,格式,控件,专用,替代,非字符,保留。

[重点添加]


好的,代码点是一定范围内的整数。它们分为称为“代码点类型”的类别。

现在让我们看一下definition D76, Section 3.9, Unicode Encoding Forms


D76 Unicode标量值:
除高代理和低代理代码点外的任何Unicode代码点。

•根据此定义,Unicode标量值集由范围0到D7FF16和E00016组成
到10FFFF16(含)。


替代品在D76之前的3.8节中定义和解释。故事的要旨是,代孕分为高代孕和低代孕两类。这些仅由UTF-16使用,以便它可以表示所有代码点。 (有1,114,112个代码点,但216 = 65536远少于这个。)
UTF-8没有这个问题。它是一种可变长度的编码方案(代码点可以为1-4个字节长),因此它可以容纳所有代码点而无需使用代理。

简介:一个代码点是标量或代理。这纯粹是“整数分类”,不涉及编码方案。 UTF-16使用代理对,因为它不能直接表示所有可能的代码点。 UTF-8不使用代理对。

将来,您可能会发现咨询Unicode glossary很有帮助。它包含许多常用定义,以及指向Unicode规范中的定义的链接。

关于unicode - Unicode代码点和Unicode标量之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48465265/

相关文章:

Python:使用 punycode 无法正确解码 'Idna' 字符

SQL Server,如何将默认排序规则设置为unicode?

c++ - 将 unicode 字符串定义为字节数组

c++ - 什么是 C++ 模块权限?

python - 什么是迭代器、可迭代和迭代?

networking - 协议(protocol)术语 : Message versus Packet

python 瓶 : UTF8 path string invalid when using app. mount()

terminology - 32- 和 64- "bits"的正确术语是什么

Java 框架集成开发环境

Python 3 OS 走 unicode 异常