6.5 UTF-8 サポート

このライブラリは基本的な UTF-8 エンコーディングのサポートを提供します。全ての関数は utf8 テーブルに公開されます。このライブラリに含まれる Unicode のサポートはエンコーディング処理だけであり、文字種の識別といった文字の意味が必要となる操作は対象外です。

特に断っていない限り、パラメータにバイト位置を取る全ての関数はその位置がバイトシーケンスの始まりまたは対象文字列の長さに 1 を加えた値であることを仮定します。また文字列ライブラリと同様、負のインデックスは文字列の最後から数えます。

バイトシーケンスを作成する関数は 0x7FFFFFFF までの全ての値を受け取ります。これはバイトシーケンスを最大 6 バイトで表すオリジナルの UTF-8 仕様の定義に従っています。

バイトシーケンスを解釈する関数は正当な (well-formed かつオーバーロングでない) シーケンスだけを受け付けます。デフォルトでは正当な Unicode コードポイントを表すシーケンスだけが受理され、10FFFF より大きい値およびサロゲートペアは拒否されます。利用可能な場合には真偽値引数 laxtrue にすることでこのチェックを無効化し、0x7FFFFFFF までの全ての値を受理させることができます (この場合でも well-formed でないシーケンスおよびオーバーロングなシーケンスは拒否されます)。

utf8.char (...)

ゼロ個以上の整数を受け取り、それぞれを対応する UTF-8 バイトシーケンスに変換し、それらのシーケンスを連結した文字列を返します。

utf8.charpattern

パターン "[\0-\x7F\xC2-\xFD][\x80-\xBF]*" です。文字列であり、関数ではありません。正当な UTF-8 文字列をこのパターンで検索すると、ちょうど一つの UTF-8 バイトシーケンスがマッチします。

utf8.codes (s [, lax])

文字列 s に含まれる全ての UTF-8 文字を次のコードでイテレートできるような値を返します:

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

ここで p は位置 (バイト数) で、c は文字のコードポイントです。不当なバイトシーケンスに遭遇した場合にはエラーを送出します。

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

文字列 si バイト目から j バイト目まで (両端含む) に含まれる UTF-8 文字のコードポイントを整数として返します。デフォルトでは i は 1 および ji です。不当なバイトシーケンスに遭遇した場合にはエラーを送出します。

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

文字列 si バイト目から j バイト目まで (両端含む) に含まれる UTF-8 文字の数を返します。デフォルトでは i は 1 および j-1 です。不当なバイトシーケンスを見つけた場合には fail と不当なバイトの位置を返します。

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

s に含まれる n 文字目の UTF-8 文字が始まる位置 (バイト数) を i から数えた値として返します。n を負とすれば i より前にある文字の位置が返ります。i のデフォルト値は n が非負のとき 1 で、n が負のとき #s + 1 です。このため utf8.offset(s, -n) は文字列の最後から n 個目の UTF-8 文字へのオフセットを返します。指定された文字が対象の文字列に存在せず、文字列の終わりの次の文字でもない場合には fail を返します。

特別な場合として n を 0 とすると、この関数は si バイト目を含む UTF-8 文字が始まる位置を返します。

この関数は s が正当な UTF-8 文字列であることを仮定します。