\x和unicode码点之间的关系

2024-06-16 11:14:03 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python(2或3)中,计算b'\xe2\x80\x8f'.decode("utf-8")

产生\u200f,同样'\u200f'.encode("utf-8")产生b'\xe2\x80\x8f'。你知道吗

第一个看起来像一个由三个2字符的十六进制值组成的链,它们将等于十进制226、128和143。第二个看起来像一个十六进制值,等于十进制8207。你知道吗

“\xe2\x80\x8f”和“\u200f”之间是否存在逻辑关系?我对这些值的解释有误吗?你知道吗

我可以看到这些值以某种方式链接在如下表中:https://www.utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128&utf8=string-literal

但为什么这两个值在同一行?你知道吗


Tags: https链接www方式deutf8字符utf
2条回答

是的,第一个是“由三个2字符的十六进制值组成的链,它们将等于十进制226、128和143。”它是一个字节字符串。你有一个字节字符串,因为这就是encode的作用。您传递了UTF-8,因此字节是输入字符串的UTF-8编码。你知道吗

“第二个看起来像是一个十六进制值,等于十进制8207。”有点像;它是文本字符串中UTF-16代码单元的表示法。一个或两个UTF-16编码单元对Unicode码点进行编码。在这种情况下,只有一个用于对应的码点。你知道吗

当然,您可以将十六进制转换为十进制,但这在这两种情况下都不是很常见或有用。代码单元是一种特定的位模式。字节是作为整数的位模式,序列化为字节序列。你知道吗

Unicode码位范围需要21位。UTF-16以一个或两个16位代码单元对一个代码点进行编码(因此每个代码单元的字节顺序是两个字节)。UTF-8将一个码点编码为一个、两个、三个或四个8位码单元。(一个8位整数是一个字节,所以字节顺序没有意义。)每个字符编码都有一个单独的算法,可以将21位分配到所需的任意多个字节中。两者都是可逆的,完全支持Unicode字符集。所以,你可以直接把一个转换成另一个。你知道吗

您引用的表没有显示UTF-16。它显示Unicode码点十六进制表示法:U+200F。这种表示法是供人类识别码点的。当UTF-16在一个代码单元中编码一个代码点时,它的编号与该代码点的编号相同。你知道吗

这种差异与每个字符在utf-8中表示的位/字节数有关。你知道吗

For any character equal to or below 127 (hex 0x7F), the UTF-8 representation is one byte. It is just the lowest 7 bits of the full unicode value. This is also the same as the ASCII value.

For characters equal to or below 2047 (hex 0x07FF), the UTF-8 representation is spread across two bytes. The first byte will have the two high bits set and the third bit clear (i.e. 0xC2 to 0xDF). The second byte will have the top bit set and the second bit clear (i.e. 0x80 to 0xBF).

有更多关于这个here的信息。你知道吗

如果您想了解Python如何使用这些值的更多信息,check out here。你知道吗

相关问题 更多 >