字节中的 'Highest Bit' 或 'Highest Bits' 是什么意思?

What does it mean by 'Highest Bit' or 'Highest Bits' in a byte?

我的职业是 PHP 开发人员。

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

UTF-8 is the variable-length encoding. If a character can be represented using a single byte, UTF-8 will encode it with a single byte. If it requires two bytes, it will use two bytes and so on. It has elaborate ways to use the highest bits in a byte to signal how many bytes a character consists of. This can save space, but may also waste space if these signal bits need to be used often.

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

あ UTF-8 Encoded byte string is 11100011 10000001 10000010

あ UTF-16 Encoded byte string is 00110000 01000010

谁能解释一下在 UTF-8 编码标准和 PHP 上下文中术语 字节中最高位(或最高位) 的含义。 =14=]

另外,请向我解释一下字节中的这些最高位(或最高位)如何用于表示一个字符由多少字节组成。

一个字节highest bits(或highest bit)的这种现象如何可以节省space,但如果这些信号位也可能浪费space需要经常使用吗?

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

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

也就是说...

高位

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

信号位

在 unicode 中,不是使用所有位作为字符的值(允许一个字节中有 256 个不同的字符),而是使用较少的位,并使用一些位来表示下一个字节包含更多有关的信息相同的字符。这些信号位在 'high' 侧(在前面)。

适合 2 或 3 个字节的字符

如果只有英文文本,每个字符在 UTF-8 中仍然适合一个字节,信号位将指示没有第二个字符。如果你不时地将它与带有变音符号的拉丁字符混合使用,一些字符将是 2 个字节,但许多字符仍然是一个字节,因此它仍然比 UTF-16 多 space-efficient,UTF-16 始终是倍数2 作为字节数。

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

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