字节中的 '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-8 和 UTF-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 存储和发送主要是拉丁文的文本(包括英语)。实际上,我不会太担心这个,选择一个并坚持下去可以省去很多麻烦。
我的职业是 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-8 和 UTF-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 存储和发送主要是拉丁文的文本(包括英语)。实际上,我不会太担心这个,选择一个并坚持下去可以省去很多麻烦。