在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
但为什么这两个值在同一行?你知道吗
是的,第一个是“由三个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中表示的位/字节数有关。你知道吗
有更多关于这个here的信息。你知道吗
如果您想了解Python如何使用这些值的更多信息,check out here。你知道吗
相关问题 更多 >
编程相关推荐