Python-3 和 \x Vs \u Vs \U 在字符串编码中以及为什么

Python-3 and \x Vs \u Vs \U in string encoding and why

为什么我们在 Python 3 中有不同的面向字节的字符串表示?单一表示而不是多个表示是否足够?

对于 ASCII 范围编号打印字符串显示以 \x:

开头的序列
 In [56]: chr(128)
 Out[56]: '\x80'

在不同的数字范围内,它 Python 使用以 \u

开头的序列
In [57]: chr(57344)
Out[57]: '\ue000'

但是最高范围内的数字,即目前最大的 Unicode 数字,它使用前导 \U:

In [58]: chr(1114111)
Out[58]: '\U0010ffff'

Python 为您提供了字符串的表示形式,对于不可打印的字符,将使用 最短的可用转义序列

\x80\u0080\U00000080 是相同的字符,但 \x80 只是更短。对于chr(57344),最短的表示法是\ue000,不能用\xhh表示相同的字符,该表示法只能用于[=17=]xFF.[=24以下的字符=]

有些字符甚至有单字母转义,例如 \n 换行符,或 \t 制表符。

由于历史和实际原因,

Python 有多个符号选项。在 byte string 中,您只能创建 0 - 255 范围内的字节,因此 \xhh 比在任何地方都必须使用 \U000hhhhh 更有帮助且更简洁甚至不能使用该符号可用的全部范围,并且 \xhh\n 以及相关代码对于其他语言的程序员来说很熟悉。