gpt4 book ai didi

unicode - UTF-8 编码如何识别单字节和双字节字符?

转载 作者:行者123 更新时间:2023-12-03 13:41:47 28 4
gpt4 key购买 nike

最近我遇到了一个关于字符编码的问题,当我深入研究字符集和字符编码时,我想到了这个疑问。UTF-8 编码最受欢迎,因为它向后兼容 ASCII。因为 UTF-8 是可变长度的编码格式,如何区分单字节和双字节字符。 例如,“A”存储为“410754”(A的Unicode是41,阿拉伯字符的Unicode是0754。编码如何识别41是一个字符,0754是另一个二字节字符?为什么不把4107当作一个双字节字符,把54当作一个单字节字符?

最佳答案

For example, "Aݔ" is stored as "410754"


这不是 UTF-8 的工作方式。
字符 U+0000 到 U+007F(又名 ASCII)存储为单个字节。它们是唯一的代码点在数字上与其 UTF-8 表示相匹配的字符。例如,U+0041 变为 0x41这是 01000001以二进制形式。
所有其他字符都用多个字节表示。 U+0080 到 U+07FF 各使用两个字节,U+0800 到 U+FFFF 各使用三个字节,U+10000 到 U+10FFFF 各使用四个字节。
计算机知道一个字符的结束位置和下一个字符的开始位置,因为 UTF-8 被设计为用于 ASCII 的单字节值与用于多字​​节序列的值不重叠。字节 0x00通过 0x7F仅用于 ASCII 而没有其他用途;上面的字节 0x7F仅用于多字节序列,没有其他用途。此外,在多字节序列开头使用的字节也不能出现在这些序列中的任何其他位置。
因此,需要对代码点进行编码。考虑以下二进制模式:
  • 2 个字节:110xxxxx 10xxxxxx
  • 3 个字节:1110xxxx 10xxxxxx 10xxxxxx
  • 4 个字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

  • 第一个字节中的字节数告诉您接下来有多少字节仍属于同一个字符。属于该序列的所有字节都以 10 开头以二进制形式。要对字符进行编码,请将其代码点转换为二进制并填充 x。
    例如:U+0754 介于 U+0080 和 U+07FF 之间,因此需要两个字节。 0x0754二进制是 11101010100 ,所以你用这些数字替换 x:
    110 11101 10 010100

    关于unicode - UTF-8 编码如何识别单字节和双字节字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44565859/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com