首页 > 解决方案 > \x 和 unicode 代码点之间的关系

问题描述

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

产量\u200f,同样'\u200f'.encode("utf-8")产量b'\xe2\x80\x8f'

第一个看起来像一个由三个 2 字符十六进制值组成的链,分别等于十进制 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

但为什么这两个值在同一行?

标签: pythonunicodeutf-8hexescaping

解决方案


差异与每个字符在 utf-8 中表示的位数/字节数有关。

对于等于或小于 127(十六进制 0x7F)的任何字符,UTF-8 表示为一个字节。它只是完整 unicode 值的最低 7 位。这也与 ASCII 值相同。

对于等于或小于 2047(十六进制 0x07FF)的字符,UTF-8 表示分布在两个字节上。第一个字节将设置两个高位,第三位清零(即 0xC2 到 0xDF)。第二个字节将设置最高位并清除第二个位(即 0x80 到 0xBF)。

有更多关于这里的信息。

如果您想了解有关 Python 如何使用这些值的更多信息,请查看此处


推荐阅读