在Python (2或3)中,计算b'\xe2\x80\x8f'.decode("utf-8")
产生\u200f
,类似地'\u200f'.encode("utf-8")
产生b'\xe2\x80\x8f'
。
第一个看起来像一个由三个两个字符的十六进制值组成的链,这三个值等于十进制226、128和143。第二个看起来像是一个十六进制值,等于十进制的8,207。
'\xe2\x80\x8f‘和'\u200f’之间是否存在逻辑关系?我是否错误地解释了这些值?
我可以在下面这样的表中看到这些值以某种方式链接在一起:https://www.utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128&utf8=string-literal
但是为什么这两个值在同一行呢?
发布于 2019-04-18 00:33:09
是的,第一个是“三个两个字符的十六进制值的链,它们等于十进制的226、128和143”。它是一个字节字符串。你得到了一个字节字符串,因为这就是encode
所做的。您向它传递了UTF-8,因此字节是输入字符串的UTF-8编码。
“第二个看起来像是一个等于十进制8,207的十六进制值。”在某种程度上,它是文字字符串中UTF-16代码单元的表示法。一个或两个UTF-16代码单元对Unicode代码点进行编码。在这种情况下,只有一个用于对应的码点。
当然,您可以将十六进制转换为十进制,但这在这两种情况下都不是很常见或有用。代码单元是特定的比特模式。字节是作为整数的位模式,序列化为字节序列。
Unicode码点范围需要21位。UTF-16以一个或两个16位代码单元对一个代码点进行编码(因此,每个代码单元的字节顺序是两个字节)。UTF-8以一个、两个、三个或四个8位代码单元对码点进行编码。(8位整数是一个字节,因此字节顺序没有实际意义。)每种字符编码都有单独的算法来将21位分配到所需的字节中。两者都是可逆的,并且完全支持Unicode字符集。因此,您可以直接将其中一个转换为另一个。
您引用的表没有显示UTF-16。它显示了Unicode代码点十六进制符号: U+200F。该符号用于人类识别代码点。当UTF-16在一个编码单元中对一个码点进行编码时,它的编号与码点的编号是相同的。
https://stackoverflow.com/questions/55737130
复制相似问题