字符串编码中的Python-3和\x Vs\u Vs\u以及原因
为什么在Python3中有不同的面向字节的字符串表示?用单个表示而不是多个表示是否足够 对于ASCII范围号打印,字符串显示以字符串编码中的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
\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
?