unicode - Unicode 是否有定义的最大代码点数?

标签 unicode utf-8 utf-16 codepoint utf-32

我已经阅读了很多文章以了解 Unicode 代码点的最大数量,但我没有找到最终答案。

我知道 Unicode 代码点已最小化,以使所有 UTF-8 UTF-16 和 UTF-32 编码都能够处理相同数量的代码点。但是这个代码点的数量是多少?

我遇到的最常见的答案是 Unicode 代码点在 0x000000 到 0x10FFFF (1,114,112 个代码点)的范围内,但我也在其他地方读到它是 1,112,114 个代码点。那么是否有一个数字可以给出,或者问题是否比这更复杂?

最佳答案

Unicode 中的最大有效代码点为 U+10FFFF,这使其成为 21 位代码集(但并非所有 21 位整数都是有效的 Unicode 代码点;特别是从 0x110000 到 0x1FFFFF 的值不是有效的 Unicode 代码点)。

这就是数字 1,114,112 的来源:U+0000 .. U+10FFFF 是 1,114,112 个值。

但是,还有一组代码点可以替代 UTF-16。这些在 U+D800 .. U+DFFF 范围内。这是为 UTF-16 保留的 2048 个代码点。

1,114,112 - 2,048 = 1,112,064

还有66个非字符。这些在 Corrigendum #9 中部分定义。 : U+nFFFE 和 U+nFFFF 形式的 34 个值(其中 n 是值 0x00000, 0x10000, ... 0xF0000, 0x100000)和 32 个值 U+FDD0 - U+FDEF。减去这些也会产生 1,111,998 个可分配字符。为“私有(private)使用”保留了三个范围:U+E000 .. U+F8FF、U+F0000 .. U+FFFFD 和 U+100000 .. U+10FFFD。实际分配的值的数量取决于您正在查看的 Unicode 版本。您可以在 Unicode Consortium 找到有关最新版本的信息。 .除其他外,那里的介绍说:

The Unicode Standard, Version 7.0, contains 112,956 characters



所以只分配了大约 10% 的可用代码点。

我无法解释为什么您发现 1,112,114 作为代码点的数量。

顺便说一句,选择上限 U+10FFFF 以便 Unicode 中的所有值都可以用一个或两个 UTF-16 中的 2 字节编码单元表示,使用一个高代理和一个低代理来表示 BMP 或 Basic 之外的值多语言平面,即范围 U+0000 .. U+FFFF。

关于unicode - Unicode 是否有定义的最大代码点数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27415935/

相关文章:

python - Beautiful Soup Unicode 编码错误

R 无法以 UTF-8 打开

c++ - 如何检查文本文件是否以 UTF-8 编码?

string - 由于字符串中的 unicode 字符导致应用程序崩溃

c++ - 将 C++ std::string 转换为 UTF-16-LE 编码的字符串

Golang 将 UTF16 字符串转换为 UTF8

java - Java .properties 文件中的日语文本

mysql - 呈现 : 'ascii' codec can't encode characters in position 4-5: ordinal not in range(128) 时捕获 UnicodeEncodeError

mysql - 如何让 MySQL 识别 LIKE 和 REGEXP 中的多字节字符?

python - 如何使用 python 解码 utf 16 中存在的字符串