34.7 字符集

Emacs 中的 字符集(character set)(或 charset,),是为其中每个字符分配了数值码点的字符集合。(Unicode 标准中将其称为 编码字符集(coded character set)。)每个 Emacs 字符集都有一个符号类型的名称。同一个字符可以属于任意多个不同的字符集,但在不同字符集中通常会有不同的码点。常见的字符集包括 asciiiso-8859-1greek-iso8859-7windows-1255。字符在某个字符集中被分配的码点,通常与其在 Emacs 缓冲区和字符串中使用的码点不同。

Emacs 定义了若干特殊字符集。unicode 字符集包含所有 Emacs 码点在 0..#x10FFFF 范围内的字符。emacs 字符集包含所有 ASCII 与非 ASCII 字符。而 eight-bit 字符集包含 8 位原始字节;Emacs 用它来表示文本中出现的原始字节。

Function: charsetp object

object 是表示某个字符集名称的符号,则返回 t,否则返回 nil

Variable: charset-list

该变量的值为所有已定义字符集名称构成的列表。

Function: charset-priority-list &optional highestp

该函数返回按优先级排序的所有已定义字符集列表。若 highestp 为非 nil,函数只返回优先级最高的单个字符集。

Function: set-charset-priority &rest charsets

该函数将 charsets 设置为优先级最高的字符集。

Function: char-charset character &optional restriction

该函数返回 character 所属的优先级最高的字符集名称。ASCII 字符是例外:对它们而言,该函数始终返回 ascii

restriction 为非 nil,它应当是一个待搜索的字符集列表。或者,它也可以是一个编码系统,此时返回的字符集必须被该编码系统支持(see 编码系统)。

Function: charset-plist charset

该函数返回字符集 charset 的属性列表。尽管 charset 本身是符号,但该属性列表与该符号的属性列表并不相同。字符集属性包含该字符集的重要信息,如文档字符串、短名称等。

Function: put-charset-property charset propname value

该函数将 charsetpropname 属性设置为给定的 value

Function: get-charset-property charset propname

该函数返回 charsetpropname 属性值。

Command: list-charset-chars charset

该命令显示字符集 charset 中包含的字符列表。

Emacs 可以在字符的内部表示与该字符在特定字符集中的码点之间进行转换。下面两个函数支持这类转换。

Function: decode-char charset code-point

该函数将 charset 中码点为 code-point 的字符解码为对应的 Emacs 字符并返回。若 charset 中该码点未分配字符,则返回 nil

为保持向后兼容,如果 code-point 超出 Lisp 定长整数范围(see most-positive-fixnum),可以将其指定为 cons 单元格 (high . low),其中 low 为数值的低 16 位,high 为高 16 位。这种用法已被废弃。

Function: encode-char char charset

该函数返回字符 charcharset 中对应的码点。若 charset 中未为 char 分配码点,则返回 nil

下面这个函数便于对某个字符集中的全部或部分字符执行指定操作:

Function: map-charset-chars function charset &optional arg from-code to-code

charset 中的字符调用 functionfunction 会接收两个参数。第一个参数是 cons 单元格 (from . to),其中 fromto 表示 charset 包含的一段字符范围。传给 function 的第二个参数是 arg;若省略 arg,则为 nil

默认情况下,传给 function 的码点范围包含 charset 中的所有字符,但可选参数 from-codeto-code 可将范围限制在该字符集的这两个码点之间。若其中任意一个为 nil,则分别默认使用该字符集的第一个或最后一个码点。注意:from-codeto-codecharset 自身的码点,而非字符对应的 Emacs 编码;与之相对,传给 function 的 cons 单元格中的 fromto Emacs 字符编码。这些 Emacs 字符编码要么是 Unicode 码点,要么是 Emacs 扩展 Unicode 且超出 Unicode 范围 0..#x10FFFF 的内部码点(see 文本表示方式)。后一种情况很少见,仅出现在传统中日韩字符集中,用于表示尚未与 Unicode 统一的字符码点。