符号是什么意思" U +"在讨论Unicode编码时?

时间:2018-05-23 19:48:11

标签: unicode unicode-string

我意识到这是非常基本的,因为我正在阅读维基百科中的Unicode以及它指向的任何地方。但是这个" U + 0000"语义没有完全解释。在我看来," U"总是等于0。

为什么是" U +"部分符号?究竟是什么意思? (它似乎是一些基础值,但我无法理解它何时或为何不是非零。)

另外,如果我从其他来源收到一串文字,我怎么知道该字符串是编码为UTF-8还是UTF-16或UTF-32?有什么方法可以通过上下文自动确定?

1 个答案:

答案 0 :(得分:3)

  1. 来自维基百科,文章Unicode,第Architecture and Terminology部分:

      

    Unicode定义了1,114,112个代码点的代码空间,范围为0到10FFFF(十六进制)。通常,通过写入“U +”后跟其十六进制数来引用Unicode代码点。对于基本多语言平面(BMP)中的代码点,使用四个数字(例如,字符LATIN CAPITAL LETTER X的U + 0058);对于BMP之外的代码点,使用五位或六位数。

    引入了这个约定,以便读者理解代码点特别是 Unicode 代码点。例如,字母ă(LATIN SMALL LETTER A WITH BREVE)是U + 0103;在Code Page 852中它有代码0xC7,在代码页1250中它有代码0xE3,但是当我写U + 0103时,每个人都明白我的意思是Unicode代码点,他们可以查找它。

  2. 对于使用拉丁字母编写的语言,UTF-16和UTF-32字符串很可能包含许多字节,其值为0,不应出现在UTF-8编码字符串中。通过查看哪个字节为零,即使没有Byte Order Mark,也可以推断出UTF-16和UTF-32字符串的字节顺序。

    例如,如果你得到字节

    0xC3 0x89 0x70 0xC3 0xA9 0x65
    

    这很可能是UTF-8编码中的Épée。在little-endian UTF-16中,这将是

    0x00 0xC9 0x00 0x70 0x00 0xE9 0x00 0x65
    

    (注意每个偶数字节是如何为零。)