为什么 Unicode 限制为 0x10FFFF?

2024-01-06

为什么最大 Unicode 代码点限制为 0x10FFFF?是否可以在该代码点之上表示 Unicode - 例如0x10FFFF + 0x000001 = 0x110000 - 通过任何编码方案,如 UTF-16、UTF-8?


It's because of UTF-16. Characters outside of the base multilingual plane (BMP) are represented using a surrogate pair https://en.wikipedia.org/wiki/UTF-16 in UTF-16 with the first code unit (CU) lies between 0xD800–0xDBFF and the second one between 0xDC00–0xDFFF. Each of the CU represents 10 bits of the code point, allowing total 20 bits of data (0x100000 characters) which is split into 16 planes (16×216 characters). The remaining BMP will represent 0x10000 characters (code points 0–0xFFFF)

Therefore the total number of characters is 17×216 = 0x100000 + 0x10000 = 0x110000 which allows for code points from 0 to 0x110000 - 1 = 0x10FFFF. Alternatively the last representable code point can be calculated like this: Code points in the BMP are in the range 0–0xFFFF, so the offset for characters encoded with a surrogate pair is 0xFFFF + 1 = 0x10000, which means the last code point that a surrogate pair represents is 0xFFFFF + 0x10000 = 0x10FFFF

这是由Unicode 字符编码稳定性策略 https://www.unicode.org/policies/stability_policy.html#Property_Value上面的代码点将永远不会被分配

General_Category 属性值代理 (Cs) 是不可变的:具有该值的代码点集永远不会改变。

历史上 UTF-8 允许使用 6 个字节最多 U+7FFFFFFF https://en.wikipedia.org/wiki/UTF-8#History而 UTF-32 可以存储的数量是它的两倍。然而,由于 UTF-16 的限制,Unicode 委员会决定 UTF-8 永远不能超过 4 个字节,从而导致与 UTF-16 的范围相同

2003 年 11 月,UTF-8 受 RFC 3629 限制以匹配 UTF-16 字符编码的约束 https://www.rfc-editor.org/rfc/rfc3629#page-11:明确禁止与高和低代理字符相对应的代码点删除了超过 3% 的三字节序列,并以 U+10FFFF 结尾删除了超过 48% 的四字节序列以及所有五字节和六字节序列序列。

https://en.wikipedia.org/wiki/UTF-8#History https://en.wikipedia.org/wiki/UTF-8#History

同样的情况也适用于 UTF-32

2003 年 11 月,Unicode 受到 RFC 3629 的限制,以匹配 UTF-16 编码的约束:明确禁止大于 U+10FFFF 的代码点(以及高和低代理项 U+D800 到 U+DFFF)。这个有限子集定义了 UTF-32

https://en.wikipedia.org/wiki/UTF-32 https://en.wikipedia.org/wiki/UTF-32

你可以阅读这个更详细的答案 https://www.quora.com/Why-does-Unicode-have-seventeen-planes-U-0000-to-U-10FFFF-which-sometimes-requires-a-sixth-digit-and-not-sixteen-U-0000-to-U-FFFFF and

  • UTF-8、UTF-16 和 UTF-32 可以存储的字符数有何不同? https://stackoverflow.com/q/130438/995714
  • Unicode 联盟是否打算让 UTF-16 字符耗尽? https://stackoverflow.com/q/9384120/995714
  • Unicode 可以映射多少个字符? https://stackoverflow.com/q/5924105/995714
  • 建议将代码位置范围限制为 U-0010FFFF 以内的值 http://www.unicode.org/L2/L2000/00079-n2175.htm
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Unicode 限制为 0x10FFFF? 的相关文章

  • Java 统一编码

    A Java char is 2 bytes http java sun com docs books tutorial java nutsandbolts datatypes html 最大大小为 65 536 但有95 221 http
  • 分组为连续整数范围

    我检查了其他帖子 包括使用 Linq 按可变整数范围进行分组 https stackoverflow com questions 1375997 group by variable integer range using linq 但我没有
  • 什么是标准 unicode 字体?

    以下操作系统的标准 unicode 字体是什么 视窗XP 视窗Vista Window 7 按照标准 我的意思是它们存在于操作系统的全新安装中 无需将它们作为附加包安装 我一直在寻找同样的东西 看起来所有 Win 操作系统中只有一种字体 L
  • 如何用 unicode 图像替换字符?

    我怎样才能更换一个 来自数据库到碧玉字段的文本中的字符 带有图像 目标如下图所示 就像是 F KN Zusatzinfo DV Einleitungstext replaceAll x254 哪里的x254是红色方块的ascii 代码 但上
  • Java中的字节和字符转换

    如果我将一个字符转换为byte然后回到char 那个角色神秘地消失了 变成了别的东西 这怎么可能 这是代码 char a line 1 byte b byte a line 2 char c char b line 3 System out
  • 为什么该字符串的长度比其中的字符数长?

    这段代码 string a abc string b A C Console WriteLine Length a 0 a Length Console WriteLine Length b 0 b Length outputs Lengt
  • ASCII“../”是 PHP 中指示目录遍历的唯一字节序列吗?

    我有一个 PHP 应用程序 它使用 GET参数来选择文件系统上的 JS CSS 文件 如果我拒绝输入字符串包含的所有请求 或者可见 7 位 ASCII 范围之外的字节 当路径传递到 PHP 的底层 基于 C 文件函数时 这是否足以防止父目录
  • git diff 在尖括号中显示 unicode 符号

    我有一个带有 unicode 符号 俄语文本 的文件 当我修复一些拼写错误时 我使用git diff color words 看看我所做的改变 如果是 unicode 西里尔文 符号 尖括号会造成一些混乱 如下所示 cat p1 cat p
  • 如何去除 XSL 中字符的重音符号?

    我一直在寻找 但找不到相当于字符 规范化空间 的 XSL 函数 也就是说 我的内容带有重音 UNICODE 字符 这很好 但是从该内容中 我正在创建一个文件名 但我不想要这些重音 那么 是否有一些我忽略的东西 或者没有正确地谷歌搜索来轻松处
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • Matplotlib mathtext:刻度标签中的字形错误

    当使用默认值时 我在 matplotlib 2 0 2 中渲染数学时观察到错误mathtext https matplotlib org 1 5 1 users mathtext html mathtext tutorial与LaTeX h
  • 有没有办法匹配任意 Unicode 字母字符?

    我有一些文档经过 OCR 从 PDF 转换为 HTML 因此 他们最终会出现很多随机的 unicode 标点符号 而转换器会搞砸 即省略号等 他们还正确地有一堆非英语但仍然是字母字符 如 和俄语字符等 有没有办法制作一个匹配任何 unico
  • Mysql带限制的删除语句

    我试图从表中删除行 但出现错误 DELETE FROM chat messages ORDER BY timestamp DESC LIMIT 20 50 我在 50 时收到此错误 您的 SQL 语法有错误 检查与您的 MySQL 服务器版
  • Python - Unicode 到 ASCII 的转换

    我无法在不丢失数据的情况下将以下 Unicode 转换为 ASCII u ABRA xc3O JOS xc9 I tried encode and decode他们不会这么做 有人有建议吗 Unicode 字符u xce0 and u xc
  • 在 PowerShell 中显示 Unicode 表情符号

    我想在 PowerShell 中显示像 U 1F4A9 这样的 Unicode 表情符号 我知道这仅在 ISE 控制台内有效 但我不知道如何操作 到目前为止我尝试过的 CharBytes System Text Encoding Unico
  • Python urllib.request.urlopen:AttributeError:'bytes'对象没有属性'data'

    我正在使用 Python 3 并尝试连接到dstk 我收到错误urllib包裹 我对SO进行了很多研究 但找不到与这个问题类似的东西 api url self api base street2coordinates api body jso
  • VBA Excel:将范围值分配给新范围

    我在将一个工作簿范围中的值分配给当前工作簿中的某个范围时遇到问题 当我使用 Range A1 C1 分配我的范围时 此代码工作正常 但是当我使用 Range Cells 1 1 Cells 1 3 定义我的范围时 该函数会失败 Sub Co
  • Clojure/Ring:使用环码头适配器,大请求会给我一个 413: FULL HEAD 错误。

    使用 Ring 的 Jetty 适配器 如果我的请求太大 我会收到 413 FULL HEAD 错误 我追踪到一个名为 headerbuffersize 的属性 但是当我尝试在 run jetty 调用中设置它时 我仍然得到 413 有没有
  • PHP 和 MySQL 的重音字符错误

    我的问题是 直接通过 PHP 编写的内容是正确重音的 但是当重音单词来自 MySQL 时 字母会像这样 我尝试使用html charset as ISO 8859 1它修复了 MySQL 字母 但破坏了其他字母 解决这一切的一种方法是设置我
  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b

随机推荐