# 4.1 字符串基础

字符是 一个 Lisp 对象，用来表示文本中单独的字符。在 Emacs Lisp 中，字符本质上是整型数；但是一个整型数究竟被当成字符还是整数，这要看其具体用法。关于整型数的字符表示，具体查阅 字符码 章节。

字符串是不变的字符序列。有一种数据类型叫做数组，数组一旦被创建，其长度便固定下来，而且不能再改变（详情查阅数组向量序列章节）。和 C 不同，Emacs Lisp 中的字符串不会被分隔符终止。

字符串是数组，因此也是序列。针对序列和数组的函数，同样可以用来操作字符串（这些函数可以在 序列 数组 向量 章节）。比如，你可以使用针对数组的 aref 函数来获取字符串中的单个字符。

Emacs 中的非ASCII字符有两种文本表示：单字节和多字节。对于大多的 Lisp 编程，你不需要特地区分这两种编码。详情查阅 文本表示章节。

有时，按键序列会以单字节字符串表示。当使用单字节字符串来表示按键序列时，在 128 到 255 区间的字符串元素表示 meta 字符，而不是 128 到 255 的字符码。字符串中无法储存 hyper，super以及alt 控制键；字符串中可以储存 ASCII 控制键，但无法储存其他的控制键。此外 Emacs 并不区分 ASCII 字符控制键的大小写。如果你想要储存这样的字符，比如按键序列，那你就不能使用字符串，而应该使用向量。更多按键输入字符，详情查阅 字符类型章节。

字符串同样被用来储存正则表达式。你可以使用 string-match 对字符串进行正则匹配。函数 match-string 和 replace-match 使用正则表达式对字符串进行分解好修改。

和缓冲区类似，字符串也可以储存具有文本属性的字符。详情查阅文本属性。Lisp 中很多拷贝文本的操作都会连文本属性一并拷贝。

查阅 文本 章节，以获取在缓冲区中展示和拷贝字符串的相关函数。查阅 字符类型和字符串类型章节，以获取关于 字符和字符串的语法表示。查阅 非ASCII字符章节，以获取字符串编码及解码相关的函数。此外要注意，函数 length 并不是用来计算 被显示的文本的长度；而应该使用 string-width函数。
