字符串编码中的Python-3和\x Vs\u Vs\u以及原因

字符串编码中的Python-3和\x Vs\u Vs\u以及原因,python,python-3.x,unicode,python-unicode,unicode-string,Python,Python 3.x,Unicode,Python Unicode,Unicode String,为什么在Python3中有不同的面向字节的字符串表示?用单个表示而不是多个表示是否足够 对于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]: '\U0010

为什么在Python3中有不同的面向字节的字符串表示?用单个表示而不是多个表示是否足够

对于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
表示相同的字符,该符号只能用于
\0xFF
以下的字符

对于某些字符,甚至还有单字母转义,如换行符的
\n
,或制表符的
\t


由于历史和实际原因,Python有多种表示法选项。在字节字符串中,您只能创建0-255范围内的字节,因此
\xhh
比在无法使用该符号可用的完整范围时到处使用
\u000hhhh
更有用、更简洁,和
\xhh
\n
以及其他语言的程序员熟悉的相关代码。

这里不适用相同的逻辑
\U0010ffff'
,相反,它应该类似于
\U10ffff'或
\U10ffff'@MaNKuR:不,因为
\U
语法是固定宽度的。它需要8个十六进制字符;而
\u
语法需要4。如果它们包含可变数量的十六进制字符,则您不能将其与其他恰好具有十六进制含义但不属于转义序列的ascii字母或数字一起跟随。@MaNKuR:
\U
是8个十六进制字符,因为Unicode标准可能会扩展到需要所有这些数字。仅仅因为今天的最大码点是
\U0010FFFF
,并不意味着未来对Unicode标准的更新永远不会达到
\ufffffff
。我仍然感到困惑,
\u00a3
\xa3
对于符号
是相同的。但是
\ua3
不起作用?@mingchau:
\ua3
不起作用,因为这不是有效的
\uhhh
转义序列,Python根本不接受较短的形式。这是因为接受较短的转义确实令人困惑,文本
'Hello\ua3darling'
是否包含转义序列
\ua
\ua3
\ua3d
\ua3da