【问题标题】:How does UTF16 encode characters?UTF16 如何对字符进行编码?
【发布时间】:2017-05-29 13:20:26
【问题描述】:

编辑

因为我似乎不会得到一般问题的答案。我将它限制在一个细节:我对以下内容的理解是否正确?

代理的工作方式如下:

  1. 如果第一对字节不是在 D800 和 DBFF 之间 - 有 不会是第二对。
  2. 如果它在 D800 和 DBFF 之间 - a) 会有第二对 b) 第二对将在 DC00 和 DFFF 的范围内。
  3. 没有值在 D800 之间的单对 UTF16 字符 和 DBFF。
  4. 没有值在 DC00 之间的单对 UTF16 字符 和 DFFF。

是这样吗?

原始问题

我尝试阅读有关 UTF16 的内容,但似乎无法理解。什么是“平面”和“代理”等? “平面”是第一个字节的前 5 位吗?如果是这样,那么为什么不使用 32 架飞机,因为无论如何我们都在使用这 5 位?什么是代理人?它们分别对应哪些位?

我知道 UTF16 是一种编码 Unicode 字符的方法,它有时使用 16 位编码字符,有时使用 32 位编码,不多不少。我假设前 2 个字节有一些值列表(哪些是最重要的?),这表明将存在第二个 2 个字节。

但是,与其继续我不了解的内容,也许有人可以对此进行排序?

【问题讨论】:

  • @downvoters 也愿意帮忙吗?
  • 我怀疑他们是因为“does not show any research effort”。您对UTF-16 FAQ 有任何疑问吗?
  • @TomBlodget 谢谢。我不确定我应该如何展示努力。包括指向我已阅读(但不理解)的文章的链接?这对这个问题有什么帮助?但无论如何,你可能是对的,这就是它被否决的原因。我现在正在阅读您提供给我的链接。谢谢。
  • @TomBlodget 我有点难以理解那里的实际代码(我熟悉 C#,而不是 C)但基本上我明白如果第一对字节在 D800 和 DBFF 之间- 然后需要第二对。但是后面的代理是什么意思?它们似乎表示如果第二对字节在DC00和DFFF之间,则需要第二对字节。当然,这没有任何意义。

标签: text unicode encoding character-encoding language-agnostic


【解决方案1】:

四个都是。

为了澄清,UTF-16 中的术语“对”指的是两个 UTF-16 代码单元,第一个在 D800-DBFF 范围内,第二个在 DC00-DFFF 范围内。

代码单元是 16 位(2 个字节),通常写为十六进制 (0x000A) 的无符号整数。字节的顺序(0x00 0x0A 或 0x0A 0x00)由作者指定或在文件或流的开头用 BOM (0xFEFF) 指示。 (BOM 使用与文本相同的算法进行编码,但不是文本的一部分。一旦确定了字节顺序并将字节重新排序为系统的本机顺序,它通常会被丢弃。)

【讨论】:

  • 我想验证您是否理解,当我在 4 个问题中写“pair”时,我的意思是一对字节。而“单对”是指一个用 2 个字节(而不是 4 个字节)表示的字符。
  • 感谢您的所有帮助。没有你的帮助,我什至无法提出修改后的问题。特别是this UTF16 FAQ link.
猜你喜欢
  • 2014-03-18
  • 2021-02-07
  • 1970-01-01
  • 2016-10-01
  • 2011-07-02
  • 2012-02-16
  • 1970-01-01
  • 2017-11-23
  • 2012-03-25
相关资源
最近更新 更多