我正在学习python中的字符串和字节串。我不明白为什么某些十六进制转义序列以 \XNN 形式显示而有些则不是?
s = 'A\x31\tC'
s1 = 'A\x00B\tC'
在这种情况下,当我在控制台中输入 s1 时,它会在引号内打印出确切的字符串“A\x00B\tC”,但是当我在控制台中输入 s 时,它会打印出“A1B\tC”。只有当我打印 s1 时,屏幕才会显示“AB C”。我不明白为什么显示某些转义字符而其他字符不显示?为什么它会在您打印它们时显示?
干杯
我正在学习python中的字符串和字节串。我不明白为什么某些十六进制转义序列以 \XNN 形式显示而有些则不是?
s = 'A\x31\tC'
s1 = 'A\x00B\tC'
在这种情况下,当我在控制台中输入 s1 时,它会在引号内打印出确切的字符串“A\x00B\tC”,但是当我在控制台中输入 s 时,它会打印出“A1B\tC”。只有当我打印 s1 时,屏幕才会显示“AB C”。我不明白为什么显示某些转义字符而其他字符不显示?为什么它会在您打印它们时显示?
干杯
如果您查看 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。我不知道。
当您在解释器中输入名称时,它使用的是调用repr该名称的结果。由于\x31可以表示为1,因此它使用它。由于\x00不能表示为可打印字符,因此它回退到使用十六进制转义符号。
注意:
>>> '\x31' == '1'
True
所以结果repr是有效的。