一个字节中的“最高位”或“最高位”是什么意思?

问题描述 投票:0回答:1

我是专业的PHP开发人员。

请考虑以下有关UTF-8编码标准的文本:

UTF-8是可变长度编码。如果可以使用单个字节表示字符,则UTF-8将使用单个字节对其进行编码。如果它需要两个字节,它将使用两个字节,依此类推。它有精心设计的方法来使用字节中的最高位来表示字符所包含的字节数。这可以节省空间,但如果需要经常使用这些信号位,也可能浪费空间。

另外,请考虑以下UTF-8和UTF-16编码示例:

あUTF-8编码字节串为11100011 10000001 10000010

あUTF-16编码字节串为00110000 01000010

有人请在UTF-8编码标准和PHP的上下文中解释一个字节中术语最高位(或最高位)的含义。

另外,向我解释一个字节中的这些最高位(或最高位)如何用于表示字符所包含的字节数。

一个字节中最高位(或最高位)的这种现象如何能够节省空间,但如果需要经常使用这些信号位,还可能浪费空间?

请在我在问题中提供的编码示例的帮助下给出您的答案和解释。

php unicode utf-8 character-encoding utf-16
1个回答
2
投票

这个答案只是在那里回答你的(小)问题,但我真的建议你阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)以获得更广泛的图景。它已经有15年了,但基础知识并没有改变,它给出了背景,技术细节和背后历史的一个很好的解释。这当然有助于解释在使用unicode进行Web开发时在实践中遇到的某些问题,它将帮助您设置好的测试用例,因此当法国或日本人开始使用它时,您的软件不会突然崩溃。毕竟,如果你开始使用unicode,你必须一直做到这一点,从数据库到charset标题。

那说......

高位

最高位是通常写在左侧的位,表示值的最高部分。就像你写1857824时一样,1是最高位数(代表一百万)。对于二进制它是相同的,除了那些数字将始终只有0或1。

信号位

在unicode中,不是将所有位用于字符的值(在一个字节中允许256个不同的字符),它使用较少的位数并使用一些位来表示下一个字节包含有关相同字符的更多信息。那些信号位在“高”侧(在前面)。

拟合2或3个字节的字符

如果您只有英文文本,则每个字符仍然适合UTF-8中的单个字节,并且信号位将指示没有第二个字符。如果你混合使用带有变音符号的拉丁字符,有些字符将是2个字节,但许多字符仍然是1字节,所以它仍然比UTF-16更节省空间,UTF-16总是2的倍数作为字节数。

这意味着UTF-16需要更少的标志(16位中的1位,而不是8位中的1位)来指示是否会有更多组。因此UTF-16为角色数据移动了更多空间。这会为你的'Japansese a'带来有趣的效果,它也适合UTF-16中的2个字节,而在UTF-8中,你需要3个字节,因为使用了太多的信号位,并且没有适合的空间日语的2个字节以及所有其他字符集。

这意味着,如果你真的担心空间,你可以考虑以UTF-16存储和发送主要是日语的文本,同时以UTF-8存储和发送主要是拉丁文本(包括英语)。实际上,我不会过分担心这一点,并且通过选择一个并坚持下去来为自己省去很多麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.