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 0xA8
(11000011 10101000
二进制)。
Wikipedia 很好地解释了 UTF-8 是如何编码的。
Does NUL Byte mean the binary character 0?
是的。
UTF-8 向后兼容 ASCII。 ASCII 使用值 0 - 127 并为它们分配了字符。这意味着字节 0000 0000
到 0111 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 0000
到 111 1111
。
Does NUL Byte mean the binary character 0
?
表示位序列0000 0000
,即decimal/hex/octal值为0
的全零字节。
我的职业是 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 0xA8
(11000011 10101000
二进制)。
Wikipedia 很好地解释了 UTF-8 是如何编码的。
Does NUL Byte mean the binary character 0?
是的。
UTF-8 向后兼容 ASCII。 ASCII 使用值 0 - 127 并为它们分配了字符。这意味着字节 0000 0000
到 0111 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 0000
到 111 1111
。
Does NUL Byte mean the binary character
0
?
表示位序列0000 0000
,即decimal/hex/octal值为0
的全零字节。