在很多情况下,我看到两者在看似可以互换使用 - 它们是相同还是不同?这似乎也取决于语言是在谈论UTF-8(例如Rust)还是UTF-16(例如Java/Haskell).代码点/标量的区别是否依赖于编码方案?
cut*_*lus 10
首先让我们看看定义D9,D10和D10a,第3.4节,字符和编码:
D9 Unicode代码空间:从0到10FFFF 16的整数范围.
D10 代码点:Unicode代码空间中的任何值.
•代码点也称为代码位置.
...
D10a 代码点类型:标准中七个基本类代码点中的任何一个:图形,格式,控制,专用,代理,非字符,保留.
[强调补充]
好的,所以代码点是一定范围内的整数.它们分为称为"代码点类型"的类别.
现在让我们看看定义D76,第3.9节,Unicode编码表单:
D76 Unicode标量值:除高代理和低代理代码点之外的任何Unicode代码点.
•作为此定义的结果,Unicode标量值的集合包括范围0到D7FF 16和E000 16 到10FFFF 16(包括0和D7FF 16).
在D76之前的第3.8节中定义和解释了代理.故事的要点是代理人分为高代理人和低代理人两类.它们仅由UTF-16使用,因此它可以表示所有代码点.(有1,114,112个代码点,但是2 16 = 65536远小于此.)UTF-8没有这个问题; 它是一种可变长度编码方案(代码点可以是1-4个字节长),因此它可以容纳所有代码点而无需使用代理.
摘要:代码点是标量或代理.这纯粹是一个"整数分类",它不涉及编码方案.UTF-16使用代理对,因为它不能直接表示所有可能的代码点.UTF-8不使用代理对.
将来,您可能会发现咨询Unicode词汇表很有帮助.它包含许多常用定义,以及Unicode规范中定义的链接.
| 归档时间: |
|
| 查看次数: |
847 次 |
| 最近记录: |