为什么从 Unicode 字符集中删除了 U+D800 到 U+DFFF 范围内的代码点?

2024-03-24

我正在学习UTF-16编码,并且我读到如果你想表示U + 10000到U + 10FFFF范围内的代码点,那么你必须使用代理对,其范围在U + D800至 U+DFFF。

假设我想对以下代码点进行编码:U+10123(二进制为 10000000100100011):

首先我布局这个位序列:

110110xxxxxxxxxx 110111xxxxxxxxxx

然后我用代码点的二进制格式填充 x 的位置:

1101100001000000 1101110100100011(十六进制 D840 DD23)


我还读到 U+D800 到 U+DFFF 范围内的代码点已从 Unicode 字符集中删除,但我不明白为什么删除这个范围!

我的意思是这个范围可以很容易地编码为 4 个字节,例如以下是 U+D812 代码点的 UTF-16 编码格式(二进制为 1101100000010010):

1101100000110110 1101110000010010(D836 DC12 十六进制)

Note:我在示例中使用 UTF-16 Big Endian。


Codepoints U+D800 - U+DFFF are reserved exclusively1 for use with UTF-16. Since they are not in the range of U+10000 - U+10FFFF, UTF-16 would not encode them individually using surrogate pairs, so it would be ambiguous (and illegal2) for these individual codepoints to appear un-encoded in a UTF-16 sequence.


Per the Unicode.org UTF-16 常见问题解答 http://www.unicode.org/faq/utf_bom.html:

1: Q: What are surrogates? http://www.unicode.org/faq/utf_bom.html#utf16-1

A: Surrogates are code points from two special ranges of Unicode values, reserved for use as the leading, and trailing values of paired code units in UTF-16. Leading, also called high, surrogates are from D80016 to DBFF16, and trailing, or low, surrogates are from DC0016 to DFFF16. They are called surrogates, since they do not represent characters directly, but only as a pair.

2: Q: Are there any 16-bit values that are invalid? http://www.unicode.org/faq/utf_bom.html#utf16-7

A: Unpaired surrogates are invalid in UTFs. These include any value in the range D80016 to DBFF16 not followed by a value in the range DC0016 to DFFF16, or any value in the range DC0016 to DFFF16 not preceded by a value in the range D80016 to DBFF16.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么从 Unicode 字符集中删除了 U+D800 到 U+DFFF 范围内的代码点? 的相关文章

  • 执行 Boyer-Moore 模式匹配时是否必须考虑编码?

    我即将实现 Boyer Moore 模式匹配算法的变体 具体来说是星期日算法 我问自己 我的字母表大小是多少 它是否取决于编码 可能的字符数 或者我可以假设我的字母表由 256 个符号组成 一个字节可以表示的符号数 在许多其他情况下 将字符
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 如何确定 OS X 中的文件编码?

    我正在尝试将一些 UTF 8 字符输入到 LaTeX 文件中TextMate http en wikipedia org wiki TextMate 它说它的默认编码是UTF 8 但LaTeX似乎不理解它们 Running cat my f
  • unicode().decode('utf-8', 'ignore') 引发 UnicodeEncodeError

    这是代码 gt gt gt z u u2022 decode utf 8 ignore Traceback most recent call last File
  • PowerShell 中的 SVN 输出编码

    我正在尝试在 PowerShell 脚本内的字符串中捕获 SVN 日志 在命令行上 输出的编码是正确的 但是当我将其捕获到字符串中时 它就不是正确的 PS C sandbox gt svn log r1804 https myserver
  • 表单帖子上的 asp.net mvc 编码

    我在我的 asp net mvc 表单 带有文本区域的 nicedit 中使用富文本编辑器 当我在帖子上提交表单时 因为它不是 html 编码的 我收到以下消息 从客户端检测到潜在危险的 Request Form 值 如何对 post 上的
  • UCS2 与 UTF。 UCS2编码无法显示哪些语言?

    UCS2 比 UTF 编码更容易在 Visual C 中使用 UCS2 编码不支持哪些语言 没有什么是你可能关心的 或者更重要的是 没有字体 UCS2 为您提供基本的多语言平面 您可以在 Unicode 网站上找到指定平面的概述 0 基本多
  • 从 SinkWriter 或 ICodecAPI 或 IMFTransform 获取编码器名称

    我使用 SinkWriter 来使用媒体基础对视频进行编码 初始化 SinkWriter 后 我想获取它使用的底层编码器 并打印出它的名称 这样我就可以看到它使用的编码器 就我而言 编码器很可能是H 264 视频编码器 http msdn
  • 问号字符显示在文本中。为什么是这样?

    我有一个备份服务器 可以自动备份我的实时站点 包括文件和数据库 在实时站点上 文本看起来不错 但是当您查看它的镜像版本时 它会显示 在某些文本中 该文本存储在新闻数据库表中 这是实时服务器和镜像服务器上的屏幕截图 将其备份到镜像服务器的过程
  • 如何查明我的字符串是否包含“micro”Unicode 字符?

    我有一个包含实验室数据的 Excel 电子表格 如下所示 g L ppb 我想测试希腊字母 是否存在 如果发现我需要做一些特别的事情 通常 我会写这样的东西 if cell StartsWith matchSequence lt unive
  • 如何解析从java文件中读取的unicode [重复]

    这个问题在这里已经有答案了 我编写了一个包含以下内容的文本文件 u0032 u0142o u017Cy u0142 然后我使用 FileReader 和 BufferedReader 来读取文件 public static void mai
  • Java ArrayList 的 (ArrayList).toString 的相反是什么?

    我正在使用toString的方法ArrayList储藏ArrayList数据到字符串中 我的问题是 我该如何走另一条路 是否有现有的方法可以解析中的数据String实例返回到ArrayList 最简洁的答案是不 没有简单的方法可以从字符串中
  • 为什么 MySQL 将 é 与 e 视为相同?

    我使用 Django Web 应用程序将 Unicode 字符串存储在 MySQL 数据库中 我可以很好地存储 Unicode 数据 但是在查询时 我发现 and e被视为好像它们是同一个角色 In 1 User objects filte
  • chrome 如何建立正确的字符编码?

    我最近一直在使用很多字符集 在尝试为随机网页建立正确的字符集时发现了很多问题 字符集可以在html文档的标题中设置 也可以在节 多次或有时声明被省略 尽管存在这些问题 chrome 每次都在设置最佳字符集方面做得很好 我尝试过搜索来源 ht
  • 用 unicode 字符删除纯文本?

    是否可以删除代码注释中不需要的修改过的单词 由于开发人员仍然在黑暗时代更简单的纯文本时代进行编码 其中文本无法使用隐藏标识符进行格式化 因此实现这一目标的唯一方法是使用 Unicode 字符 由于某些unicode字符可以扩展 y o n
  • OSX 上的 Java 7 使用 jnlp/webstart 时出现文件名编码问题

    我遇到了这个问题 经过几天的搜索和解决方法尝试均未成功 我现在有一个由 jnlp webstart 分发的内部 java swing 程序 在 osx 和 windows 计算机上 除其他外 它还从 WebDav 下载一些文件 最近 在装有
  • .properties 或 JSP 编码有问题

    我有jsp文件
  • 法语和西班牙语的特殊字符可以保存在 varchar 中吗?

    法语和西班牙语中有普通英语中不使用的特殊字符 重音元音等 varchar 是否支持这些字符 或者我需要一个 nvarchar 吗 注 我愿意NOT希望讨论我是否应该使用 nvarchar 还是 varchar 您在谈论什么 SQL 实现 我
  • Perl:管理 Windows 上的路径编码

    我正在努力处理包含非英文字符的路径 Activestate Perl Windows XP 如何打开 写入 复制等位于包含希腊语 俄语 法语重音字符的路径中的文件 假设我要将 text txt 文件复制到的目录是 C Documents a
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了

随机推荐