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

MaN*_*KuR 8 python unicode unicode-string python-3.x python-unicode

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

对于ASCII范围编号打印,字符串显示以下列开头的序列\x:

 In [56]: chr(128)
 Out[56]: '\x80'
Run Code Online (Sandbox Code Playgroud)

在不同的数字范围内,Python使用以.开头的序列 \u

In [57]: chr(57344)
Out[57]: '\ue000'
Run Code Online (Sandbox Code Playgroud)

但是在最高范围内的数字,即截至目前的最大Unicode数,它使用了一个领先的\U:

In [58]: chr(1114111)
Out[58]: '\U0010ffff'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 11

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

\x80\u0080or 相同的字符\U00000080,但\x80只是更短.对于chr(57344)最短的表示法\ue000,您不能表达相同的字符\xhh,表示法只能用于最多的字符\0xFF.

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

出于历史和实际原因,Python有多种表示法选项.在一个字节串,你只能在0范围内创建字节- 255,所以\xhh是有益的,不必使用更简洁\U000hhhhh无处不在的时候,你甚至不能使用可用于该符号的全范围,\xhh\n与相关的代码是熟悉来自其他语言的程序员.

  • @mingchau: `\ua3` 无法工作,因为这不是有效的 `\uhhhh` 转义序列,Python 根本不接受较短的形式。那是因为接受较短的转义确实会令人困惑,文本“Hello \ua3darling”是否包含转义序列“\ua”、“\ua3”、“\ua3d”或“\ua3da”? (4认同)
  • @MaNKuR:`\U` 是 8 个十六进制字符,因为可以想象 Unicode 标准可以扩展到需要所有这些数字。仅仅因为今天的最大代码点是 `\U0010FFFF` 并不意味着未来对 Unicode 标准的更新永远不会达到 `\UFFFFFFFF`。 (2认同)