UTF-8 编码标准中的第一位(即二进制 0)是什么意思?

What does the first bit(i.e. binary 0) mean in UTF-8 encoding standard?

我的职业是 PHP 开发人员

考虑下面的例子:

我想使用 UTF-8 编码对单词 "hello" 进行编码。

所以,

单词"hello"每个字母的等效码位如下:

h = 104
e = 101
l = 108
o = 111

因此,我们可以说十进制数列表表示字符串 "hello"

104 101 108 108 111

UTF-8编码将像这样存储"hello"(二进制):

01101000 01100101 01101100 01101100  01101111

如果你仔细观察上面的二进制编码值,你就会知道每一个十进制数的二进制等价物前面都有二进制位值0.

我的问题是为什么这个首字母 0 已作为前缀添加到每个可存储的字符中?在UTF-8编码中使用它的目的是什么?

使用 UTF-16 格式对同一个字符串进行编码时发生了什么?

如果有必要那么开头的额外字符可以是位值吗1?

NUL Byte是否表示二进制字符0

UTF-8 使用 7 位对 Unicode 代码点 U+0000 - U+007F(即 ASCII 字符 0-127)进行编码。第八位用于仅在编码 Unicode 代码点 U+0080 - U+10FFFF 时才需要额外字节的信号。

例如,è 是代码点 U+00E8,它以 UTF-8 编码为字节 0xC3 0xA811000011 10101000 二进制)。

Wikipedia 很好地解释了 UTF-8 是如何编码的。

Does NUL Byte mean the binary character 0?

是的。

UTF-8 向后兼容 ASCII。 ASCII 使用值 0 - 127 并为它们分配了字符。这意味着字节 0000 00000111 1111。 UTF-8 为相同的前 128 个字符保留相同的映射。

任何在 ASCII 中找不到的字符在 UTF-8 中以 1xxx xxxx 的形式编码,即对于任何非 ASCII 字符,每个编码字节的高位是 1。这些字符在 UTF-8 中以多个字节编码。序列中第一个字节的第一位告诉解码器该字符由多少字节组成; 110x xxxx 表示它是一个 2 字节字符,1110 xxxx 表示它是一个 3 字节字符,1111 0xxx 表示它是一个 4 字节字符。序列中的后续字节采用 10xx xxxx 形式。所以,不,你不能随意将它设置为1

ASCII 有各种扩展(例如 ISO-8859),它们也设置第一位,从而添加另外 128 个 1xxx xxxx.

形式的字符

还有 7 位 ASCII,它省略了第一个 0 位,只使用 000 0000111 1111

Does NUL Byte mean the binary character 0?

表示位序列0000 0000,即decimal/hex/octal值为0的全零字节。

您可能对What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text感兴趣。