我意识到这是非常基本的,因为我正在阅读维基百科中的Unicode以及它指向的任何地方。但是这个" U + 0000"语义没有完全解释。在我看来," U"总是等于0。
为什么是" U +"部分符号?究竟是什么意思? (它似乎是一些基础值,但我无法理解它何时或为何不是非零。)
另外,如果我从其他来源收到一串文字,我怎么知道该字符串是编码为UTF-8还是UTF-16或UTF-32?有什么方法可以通过上下文自动确定?
答案 0 :(得分:3)
来自维基百科,文章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代码点,他们可以查找它。
对于使用拉丁字母编写的语言,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
(注意每个偶数字节是如何为零。)