首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在UTF-8编码标准中,第一位(即二进制0)是什么意思?

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

Stack Overflow用户
提问于 2018-06-07 15:24:14
回答 2查看 1.5K关注 0票数 1

我是一个专业的开发人员

考虑下面的示例:

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

所以,

单词”的每个字母的等效代码点如下:

代码语言:javascript
复制
h = 104
e = 101
l = 108
o = 111

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

104 101 108 108 111

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

代码语言:javascript
复制
01101000 01100101 01101100 01101100  01101111

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

我的问题是,为什么每个可存储字符都要加上这个初始0的前缀?在UTF-8编码中使用它的目的是什么?

当使用UTF-16格式对相同的字符串进行编码时,执行了什么操作?

如果有必要,那么初始的额外字符可以是比特值1

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-07 15:28:26

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),它们也设置了第一位,从而增加了1xxx xxxx形式的另外128个字符。

还有7位ASCII码,它省略了第一个0位,只通过111 1111使用000 0000

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

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

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

票数 1
EN

Stack Overflow用户

发布于 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?

是。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50735223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档