如何将高unicode代码点表示为两个代码点?

时间:2015-11-11 00:40:58

标签: unicode

seen>像U + 10000这样的> 2字节unicode代码点可以写成一对,如\uD800\uDC00。他们似乎从蚕食d开始,但这就是我所注意到的。

什么是分裂动作,它是如何工作的?

2 个答案:

答案 0 :(得分:1)

UTF-8(使用我自己的话)表示最小处理原子是一个字节(代码单元长度为1个字节)。我不知道在历史上,但至少从概念上讲,UCS-2和UCS-4 Unicode编码首先出现,而UTF-8 / UTF-16似乎解决了UCS的一些问题 - *。

UCS-2表示每个字符使用2个字节而不是1个字节。这是一个固定长度的编码。 UCS-2保存每个代码点的字节串。问题是有些字符代码点需要超过2个字节来存储它。因此,UCS-2只能处理Unicode的子集(当然,范围U + 0000到U + FFFF)。

UCS-4为每个字符使用4个字节,并且它足以存储任何Unicode代码点的位串,显然(Unicode范围是从U + 000000到U + 10FFFF)。

UCS-4的问题是2字节范围之外的字符非常非常罕见,使用UCS-4编码的任何文本都会浪费太多空间。因此,使用UCS-2是一种更好的方法,除非您需要2字节范围之外的字符。

但同样,英文文本,源代码文件等主要使用ASCII字符,而UCS-2也存在同样的问题:为主要使用ASCII字符的文本浪费了太多空间(太多无用的零)。

这就是UTF-8所做的。 ASCII范围内的字符按原样保存在UTF-8文本中。它只需要每个字符的代码点/ ASCII值的位串。因此,如果UTF-8编码的文本仅使用ASCII字符,则它与任何其他Latin1编码无法区分。没有UTF-8支持的客户端只能使用ASCII字符处理UTF-8文本,因为它们看起来完全相同。这是一种向后兼容的编码。

从那时起(ASCII范围之外的Unicode字符),UTF-8文本使用两个,三个或四个字节来保存代码点,具体取决于字符。

我不知道确切的方法,但是使用已知的位前缀将bitestring分成两个,三个或四个字节,以了解用于保存代码点的字节数。如果一个字节以0开头,则表示该字符为ASCII且仅使用1个字节(ASCII范围为7位长)。如果以1开头,则使用两个,三个或四个字节对字符进行编码,具体取决于接下来的位数。

UTF-8的问题在于它需要太多的处理(它必须检查每个字符的前几位才能知道它的长度),特别是如果文本不是英文的话。例如,用希腊语编写的文本将主要使用双字节字符。

UTF-16使用双字节代码单元来解决非ASCII文本的问题。这意味着处理的原子是16位字。如果字符编码不适合双字节代码单元,则它使用2个代码单元(4个字节)对字符进行编码。这对两个代码单元称为代理对。我认为只使用2字节范围内的字符的UTF-16文本等同于使用UCS-2的相同文本。

反过来,UTF-32使用4字节代码单元,就像UCS-4那样。我不知道它们之间的区别。

答案 1 :(得分:0)

填写混乱的完整图片格式如下:

参考我从评论中学到的东西......

U+10000 是Unicode code point(映射到字符的十六进制整数)。

Unicode是代码点与字符的一对一映射。

0xD8000xDFFF的代码点的包含范围保留给UTF-16 1 Unicode vs UTF)代理单位(见下文)。< / p>

\uD800\uDC00 2 是两个这样的代理单位,称为surrogate pair。 (代理单元是代理对的代码单元。)

抽象表示:代码点(抽象字符)--> Code unit(抽象UTF-16)-->代码单元(UTF-16编码字节){ {1}}解释UTF-16

实际用法示例:输入数据是字节,可以用第二种编码包装,如HTML实体和unicode转义的ASCII,或解析器处理的任何内容-->编码解释;通过方案-->字体字形-->屏幕上的字符

映射到代码点
  

How surrogate pairs work

代理对优势:

  1. 只有高低单位。高必须跟着低。没有令人困惑的高和低单位。
  2. UTF-16可以为前63487个代码点使用2个字节,因为代理不能被误认为是代码点。
  3. 一系列2048个代码点-->,可产生1048576个代码点。
  4. 处理是在less frequently使用的字符上完成的。
  5. 1 UTF-16是唯一使用代理对的UTF
    2 格式为unicode escape sequence

    描述字符编码的图形:

    enter image description here

    enter image description here

    继续阅读: