我是一个专业的开发人员。
考虑下面的示例:
我想使用UTF-8编码对单词"hello"进行编码。
所以,
单词“”的每个字母的等效代码点如下:
h = 104
e = 101
l = 108
o = 111
因此,我们可以说十进制数列表表示字符串“”:
104 101 108 108 111
UTF-8编码将像这样存储"hello" (二进制):
01101000 01100101 01101100 01101100 01101111
如果你仔细观察上面的二进制编码值,你就会知道每个十进制数的二进制等价物前面都有二进制位值0
。
我的问题是,为什么每个可存储字符都要加上这个初始0
的前缀?在UTF-8编码中使用它的目的是什么?
当使用UTF-16格式对相同的字符串进行编码时,执行了什么操作?
如果有必要,那么初始的额外字符可以是比特值1
吗
NUL字节是否表示二进制字符0
发布于 2018-06-07 15:28:26
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),它们也设置了第一位,从而增加了1xxx xxxx
形式的另外128个字符。
还有7位ASCII码,它省略了第一个0
位,只通过111 1111
使用000 0000
。
NUL Byte是否表示二进制字符
0
?
它表示位序列0000 0000
,即具有十进制/十六进制/八进制值0
的全零字节。
发布于 2018-06-07 15:27:57
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是如何编码的。
NUL字节是否表示二进制字符0?
是。
https://stackoverflow.com/questions/50735223
复制相似问题