为什么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'
\U
语法是固定宽度吗?它需要8个十六进制字符;而\u
语法只需要4个。如果它们采用可变数量的十六进制字符,那么你就不能在其后跟随其他ASCII字母或数字,这些字母或数字恰好具有十六进制意义,但不是转义序列的一部分。 - Martijn Pieters\U
是8个十六进制字符,因为Unicode标准可能会扩展到需要所有这些数字。仅因今天的最大码点是\U0010FFFF
并不意味着未来的Unicode标准更新永远不会达到\UFFFFFFFF
。 - Martijn Pieters\u00a3
和\xa3
对于符号£
来说是相同的。但是\ua3
不能工作吗? - mingchau\ua3
无法工作,因为它不是有效的\uhhhh
转义序列,Python不接受更短的形式。这是因为接受更短的转义会非常令人困惑,比如文本'Hello \ua3darling'
中包含了转义序列\ua
、\ua3
、\ua3d
还是\ua3da
? - Martijn Pieters