意図的に上限を設けない符号化設計
9月20日に公開された技術プロジェクトが、UTF-8の構造上の考え方を拡張し、任意の大きさの非負整数を表現する実験的な可変長符号化「UTF-8000」を提案した。この設計はUnicode標準を変更するものではない。現行形式で許されるよりも多くのバイトをコード単位に必要とする場合に、UTF-8の識別しやすいバイトパターンと内蔵の長さ表示を、どのように一般化できるかを探るものだ。
標準のUTF-8は、ASCIIには1バイトを使い、その他のUnicodeコードポイントには最大4バイトを使う。UTF-8000はASCIIをそのまま維持し、先頭バイトと継続バイトを区別するおなじみの仕組みも残す。この案では、0ビットで始まるバイトはASCIIであり、複数バイトの単位は`11`という接頭ビットで始まる。継続バイトはUTF-8で使われる`10`という接頭ビットを維持する。
こうした接頭ビットにより、デコーダーはそれ以前の全データを読まなくても、遭遇したバイトの種類を識別できる。プロジェクトはこれを自己同期と説明する。ファイル内の任意の位置へ移動した後や、破損した入力から復旧する際にも、デコーダーは継続バイトを認識し、有効な開始位置を見つけるまで先へ進める。
複数バイトに分散する開始ビット
UTF-8との主な違いは、非常に大きなコード単位の長さをUTF-8000が記録する方法にある。UTF-8の長さマーカーは先頭バイト内に収まる。UTF-8000では、連続する1ビットと、それを終える0で表したマーカーを、単位の先頭付近にある追加のバイトへ延ばせる。この案は、マーカーを運ぶバイトを、一部が継続バイトを兼ねる場合も含め「開始バイト」と呼んでいる。
nバイトからなる単位では、n-2個の1ビットの後に0を置いて長さを示す。マーカーが先頭バイトに収まらなくなると、後続バイトの利用可能な位置へ分散させるが、継続バイトの接頭ビットは維持する。終端の0を読み取った時点で、デコーダーはその単位に何バイト含まれるかを正確に把握できる。
サイトは仕組みを示すために22バイトの例を用い、この大きさは説明用であって特別なケースではないと強調する。同じ規則をさらに大きな単位にも適用できるため、形式を無制限と呼んでいるという。また、ある値を必要以上のバイト数で表す過長符号化を防ぐための検査も引き継いでいる。
UTF-8000は、日常的なテキスト用の代替案というより、仕様設計の試みとして捉えるのが適切だ。Unicodeは現代のシステムが必要とする文字を既に定義しており、互換性は標準化されたUTF-8の動作に依存する。それでもこのプロジェクトは、UTF-8がなぜ自己同期性と接頭語自由性を持つのか、そして意図的に制限を取り払った符号化でもそれらの性質をどう保てるかを詳しく探っている。



