# 2.4.3.1 基本字符语法

字符本质上是整数，其打印表示是十进制数字。通常十进制数字也可以作为字符的打印输入，不过这么写容易和整数混淆。因此你应该使用Emacs Lisp提供的特定字符读取语法。这些读取语法以一个问号开头。

某个字母字符的读取语法通常是问号加上该字符；因此，‘?A‘为字符'A'的表示语法，'?B'为字符'B'的表示语法，'?a'为字符'a'的表示语法。

例如

```
?Q => 81
?q => 113
```

标点符号字符通常有类似的读取语法。不过若该标点在Lisp中有特殊语法意义，那么你需要用反斜杠'\\'将其转义。例如，'?\\('为开括号字符的读取语法。类似的，如果你想让Lisp读取字符'\\'，那么你需要这么写'?\\\\'。

你可以使用'?\a'，'?\b'，'?\t'，'?\n'，'?\v'，'?\f'，'?\s'，'?\r'，'?\d'，'?\e'分别表示control-g、删除符、制表符、换行符、垂直制表符、换页符、空格、回车、删除、ESC。例如：

```
?\a ⇒ 7                 ; control-g, C-g
?\b ⇒ 8                 ; backspace, BS, C-h
?\t ⇒ 9                 ; tab, TAB, C-i
?\n ⇒ 10                ; newline, C-j
?\v ⇒ 11                ; vertical tab, C-k
?\f ⇒ 12                ; formfeed character, C-l
?\r ⇒ 13                ; carriage return, RET, C-m
?\e ⇒ 27                ; escape character, ESC, C-[
?\s ⇒ 32                ; space character, SPC
?\\ ⇒ 92                ; backslash character, \
?\d ⇒ 127               ; delete character, DEL
```

这类由反斜杠开头的序列也称为转义序列，其中开头的反斜杠起到转译的作用；这里的转义和ESC字符没啥联系（英文中两种都写作Escape）。'\s'通常在字符常量中使用，在字符串常量中，直接敲空格就行。

反斜杠对于不需要转译的字符是无害的，被允许使用的。因此'?\\+'和'?+'是等价的。绝大多数的字符前都不要使用反斜杠。但是你必须在字符'()\[]\\;"'以及'|'\`#.,'前加上反斜杠，以防歧义。你必须在前文提到的 Unicode 字符前加上反斜杠，以防止误导阅读你代码的人。Emacs本身会将未转译的，容易引起混淆的字符高亮，以提醒你添加反斜杠。你同样可以在诸如空格、制表符、换行符、换页符前添加反斜杠转译，但通常使用上述的语法会让代码更容易阅读。
