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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (293)

我是专业的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向后兼容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。

NUL Byte是否意味着二进制字符0?

它表示特序列0000 0000,即具有十进制/十六进制/八进制值0的全零字节。

您可能对每个程序员绝对正确需要了解编码和字符集以处理文本感兴趣。

用户回答回答于

UTF-8使用7位编码Unicode代码点U + 0000 - U + 007F(ASCII字符0-127)。第8位用于仅在编码Unicode代码点U + 0080-U + 10FFFF时需要附加字节时发出信号。

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

NUL Byte是否意味着二进制字符0?

是。

扫码关注云+社区

领取腾讯云代金券