# 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函数。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://emacs-lisp.ivory.cafe/zi-fu-chuan-he-zi-fu/4.1-zi-fu-chuan-ji-chu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
