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

时间:2017-09-09 16:45:23

标签: python python-3.x unicode python-unicode unicode-string

为什么我们在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'

1 个答案:

答案 0 :(得分:10)

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

\x80\u0080\U00000080的字符相同,但\x80只是更短。对于chr(57344),最短的符号为\ue000,您无法使用\xhh表达相同的字符,该符号仅可用于\0xFF之前的字符。

对于某些字符,甚至还有单字母转义符,例如换行符为\n,标签符号为\t

出于历史和实际原因,Python有多种表示法选项。在一个字节字符串中,你只能创建0到255范围内的字节,所以\xhh比你不能在任何地方使用\U000hhhhh更有帮助,更简洁甚至可以使用该符号的全部范围,\xhh\n以及相关代码对于其他语言的程序员来说都很熟悉。