26

我正在尝试使用 '\' 字符,使用 '\a\b\c...' 只是为了自己枚举 Python 将哪些字符解释为控制字符,以及解释为什么。这是我发现的:

\a - BELL
\b - BACKSPACE
\f - FORMFEED
\n - LINEFEED
\r - RETURN
\t - TAB
\v - VERTICAL TAB

我尝试的大多数其他字符,'\g'、'\s' 等只是评估为反斜杠的 2 个字符的字符串和给定的字符。我知道这是故意的,对我来说很有意义。

但是 '\x' 是个问题。当我的脚本到达此源代码行时:

val = "\x"

我得到:

ValueError: invalid \x escape

'\x' 有什么特别之处?为什么它与其他非转义字符的处理方式不同?

4

5 回答 5

21

有一个表格列出了文档中的所有转义码及其含义。

转义序列含义注释
\xhh 十六进制值 hh (4,5) 的字符

笔记:

4. 与标准 C 不同,恰好需要两个十六进制数字。
5. 在字符串文字中,十六进制和八进制转义表示具有给定值的字节;字节不必对源字符集中的字符进行编码。在 Unicode 文字中,这些转义表示具有给定值的 Unicode 字符。

于 2010-04-24T13:51:58.733 回答
6

\xhh用于表示十六进制转义字符

于 2010-04-24T13:47:38.347 回答
5

x 用于在字符串中定义(一个字节)十六进制文字,例如:

'\x61'

将评估为“a”,因为 61 是 97 的十六进制值,它表示 ASCII 中的 a

于 2010-04-24T13:47:44.453 回答
4

\x 缺少要匹配的十六进制字符:\xnn -> \x1B

于 2010-04-24T13:46:10.617 回答
1

你没有给出完整的转义序列:

\xhh...

十六进制值 hh,其中 hh 代表十六进制数字序列('0'-'9',以及 'A'-'F' 或 'a'-'f')。与 ISO C 中的相同结构一样,转义序列一直持续到看到第一个非十六进制数字为止。(ce) 但是,使用两个以上的十六进制数字会产生未定义的结果。(POSIX awk 中不允许使用 '\x' 转义序列。)

来自:http ://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences.html

于 2010-04-24T13:48:51.627 回答