多字节 UTF-8 字符中的字节值

Byte values in multi-byte UTF-8 characters

我正在阅读有关 UTF-8 character encoding 但很难理解的内容。我知道 ASCII 字符(即字节值 0x000x7F)在 UTF-8 中表示为单个字节。我要回答的问题是,在多字节 UTF-8 字符的情况下,第二个和后续字节总是 0x800xFF,或者它们可以是任何值?

当给定的 Unicode 代码点值为 U+0000 - U+007F 时,它适合 UTF-8 中的单个字节。字节的高位设置为0,其余7位保存代码点值的位。

当给定的 Unicode 代码点值为 U+0080 或更高时,它需要 2-4 个 UTF-8 字节,具体取决于代码点值(U+0080 - U+07FF 为 2,U+0800 为 3 - U+FFFFF,4 表示 U+10000 - U+1FFFFF)。第一个字节的高位设置为 110111011110 以指示完整序列中有多少字节(分别为 2-4)。后续字节的高位设置为10。所有字节的其余位包含代码点值的位,根据需要在字节中展开。

 Bits of       First       Last      Bytes in
code point  code point  code point   sequence   Byte 1    Byte 2    Byte 3    Byte 4
    7         U+0000      U+007F        1      0xxxxxxx 
    11        U+0080      U+07FF        2      110xxxxx  10xxxxxx 
    16        U+0800      U+FFFF        3      1110xxxx  10xxxxxx  10xxxxxx 
    21        U+10000     U+1FFFFF      4      11110xxx  10xxxxxx  10xxxxxx  10xxxxxx 

阅读 description on Wikipedia for more details. It provides the above table, as well as a few examples. Also read RFC 3629,这是一个官方的 UTF-8 规范。

在 UTF-8 字符的多字节表示中,所有 字节都在 0x80 到 0xFF 范围内,即它们设置了最高有效位。这意味着字节 0x00 到 0x7F 用作 ASCII 字符(在 Unicode 中称为 Basic Latin)的单字节表示。