1

我正在学习python中的字符串和字节串。我不明白为什么某些十六进制转义序列以 \XNN 形式显示而有些则不是?

s = 'A\x31\tC'
s1 = 'A\x00B\tC'

在这种情况下,当我在控制台中输入 s1 时,它会在引号内打印出确切的字符串“A\x00B\tC”,但是当我在控制台中输入 s 时,它会打印出“A1B\tC”。只有当我打印 s1 时,屏幕才会显示“AB C”。我不明白为什么显示某些转义字符而其他字符不显示?为什么它会在您打印它们时显示?

干杯

4

2 回答 2

2

http://www.asciitable.com/

如果您查看 ASCII 表,您会看到一些字符是可打印的,而另一些则不是。

特别是\x31== 1(Hexadecimal 31 == Decimal 49 == ASCII Character 1

另一方面\x00是不可打印的。它代表空终止符(或\0

>>> '\x31' == '1'
True
>>> '\x00' == '\0'
True

一个更有趣的问题是:为什么\x31转换为1\x09转换为 a \t,而\x00没有转换为\0。我不知道。

于 2018-10-19T16:19:37.613 回答
2

当您在解释器中输入名称时,它使用的是调用repr该名称的结果。由于\x31可以表示为1,因此它使用它。由于\x00不能表示为可打印字符,因此它回退到使用十六进制转义符号。

注意:

>>> '\x31' == '1'
True

所以结果repr是有效的。

于 2018-10-19T16:25:27.333 回答