6.5 UTF-8 支持

这个库提供了对 UTF-8 编码的基础支持。所有的函数都放在表utf8 中。此库不提供除编码处理之外的任何 Unicode 支持。所有需要了解字符含义的操作,比如字符分类,都不在此范畴。

除非另有说明,当一个函数需要一个字节位置的参数时,都假定这个位置要么从字节序列的开始计算,要么从字符串长度加一的位置算。和字符串库一样,负的索引从字符串末尾计起。


utf8.char (···)

接收零或多个整数,将每个整数转换成对应的 UTF-8 字节序列,并返回这些序列连接到一起的字符串。


utf8.charpattern

用于精确匹配到一个 UTF-8 字节序列的模式(是一个字符串,并非函数)"[\0-\x7F\xC2-\xF4][\x80-\xBF]*"(参见 §6.4.1)。它假定处理的对象是一个合法的 UTF-8 字符串。


utf8.codes (s)

返回一系列的值,可以让

  1. for p, c in utf8.codes(s) do body end

迭代出字符串 s 中所有的字符。这里的 p 是位置(按字节数)而 c 是每个字符的编号。如果处理到一个不合法的字节序列,将抛出一个错误。


utf8.codepoint (s [, i [, j]])

以整数形式返回 s 中从位置 ij 间(包括两端)所有字符的编号。默认的 i 为 1 ,默认的 ji。如果碰上不合法的字节序列,抛出一个错误。


utf8.len (s [, i [, j]])

返回字符串 s 中从位置 ij 间 (包括两端)UTF-8 字符的个数。默认的 i 为 1 ,默认的 j 为 -1 。如果它找到任何不合法的字节序列,返回假值加上第一个不合法字节的位置。


utf8.offset (s, n [, i])

返回编码在 s 中的第 n 个字符的开始位置(按字节数)(从位置 i 处开始统计)。负 n 则取在位置 i 前的字符。当 n 是非负数时,默认的 i 是 1,否则默认为 #s + 1。因此,utf8.offset(s, -n) 取字符串的倒数第n 个字符的位置。如果指定的字符不在其中或在结束点之后,函数返回 nil。 作为特例,当 n 等于 0 时,此函数返回含有 si 字节的那个字符的开始位置。

这个函数假定 s 是一个合法的 UTF-8 字符串。