2.4.8.2 字符串中的非ASCII码

在 Emacs 中有两中 非ASCII码的文本表示方式:多字节和单字节(详情查阅文本表示章节)。粗略的来说,单字节字符串储存原字节,而多字节字符储存人类可识别文本。在单字节字符串中,所有的字符都是字节,其中,编号在 0 到 255 之间。相比之下,多字节字符中,会包含从 0 到 4194303 个值(详情查阅字符类型)。不论哪种情况,超出 127 的都统称为非ASCII。

你可以按照字面写法直接将非ASCII字符直接写在字符串里。如果一个字符串是从一个多字节的源,比如多字节缓冲区或多字节字符,或多字节文件,读取来的,那么 Emacs 会自动将所有非ASCII码按照多字节字符的方式读取进来,并将这个字符串作为多字节字符串。不过如果这个字符串是从一个单字节源读取的非ASCII字符,那么Emacs 就会按照单字节方式读取,并将这个字符串定义为单字节字符串。

在多字节的字符串中,你也可以不直接按着字面写法写,而是使用转义符号加上这个字符对应的字符码。详情查阅通用转义语法。

如果你在一个字符串内使用了 Unicode 风格的转义序列 '\uNNNN' 或者 '\U00NNNNNN',那么 Emacs 会自动假定这个字符串是多字节的。

你也可以使用十六进制的转义序列( '\xn' ) 或者 八进制的转义序列 ( '\n' )。不过要牢记,如果一个字符串包含了十六进制的转义序列或者八进制的,而没有一个 非ASCII码的字面写法 或者 Unicode 风格的编码,那么这些字符串会被直接认定为单字节的。也就是说,默认假定所有的非ASCII字符嗾使以八进制原始字节的形式出现的。

在十六进制和八进制的转义序列中,转义字符可能会出现数字,而这些数字是不合法的十六进制或八进制转义序列。如果字符串的下一个字符是一个数字,那么需要在字符末尾补上一个 '\ '(也就是一个反斜杠加上一个空格,来将编码”矫正“。举个例子, '\xe0\ '表示重音的 'a'。而 '\ '就像前面章节提到过的 反斜杠-新行符;它并不提供什么额外的信息,但是"矫正"了编码。

最后更新于