1. Introduction (はじめに)
ISO/IEC 10646 [ISO.10646] は、世界中のほとんどの書記体系を包含する、Universal Character Set (UCS、通用文字集合) と呼ばれる大規模な文字セットを定義しています。同じ文字セットは、Unicode標準 [UNICODE] によっても定義されており、Unicode標準は、実装者にとって非常に興味深い追加の文字プロパティやその他のアプリケーション詳細をさらに定義しています。現在まで、Unicodeの変更とISO/IEC 10646の修正および追加は互いに追跡し合っており、文字レパートリーとコードポイント割り当ては同期を保っています。関連する標準化委員会は、この非常に有用な同期性を維持することを約束しています。
エンコーディング形式 (Encoding Forms)
ISO/IEC 10646とUnicodeは、共通のレパートリーのいくつかのエンコーディング形式を定義しています:
- UTF-8
- UCS-2
- UTF-16
- UCS-4
- UTF-32
エンコーディング形式では、各文字は1つ以上のエンコーディング単位として表現されます。UTF-8を除くすべての標準UCSエンコーディング形式は、1オクテットより大きいエンコーディング単位を持っており、8ビットまたは7ビットの文字を想定する多くの現在のアプリケーションやプロトコルで使用するのが困難です。
UTF-8の特性 (Characteristics of UTF-8)
本メモの対象であるUTF-8は、1オクテットのエンコーディング単位を持っています。オクテットのすべてのビットを使用しますが、完全なUS-ASCII [US-ASCII] 範囲を保持する特性を持っています:
- US-ASCII文字は、通常のUS-ASCII値を持つ1オクテットでエンコードされます
- そのような値を持つオクテットは、US-ASCII文字のみを表し、他のものは表しません
UTF-8エンコーディングのプロパティ (UTF-8 Encoding Properties)
UTF-8は、UCS文字を可変数のオクテットとしてエンコードします。オクテットの数と各オクテットの値は、ISO/IEC 10646で文字に割り当てられた整数値(文字番号、別名コード位置 (code position)、コードポイント (code point)、またはUnicodeスカラー値 (Unicode scalar value))に依存します。
このエンコーディング形式は、以下の特性を持っています(すべての値は16進数):
✅ ASCII互換性
U+0000からU+007F(US-ASCIIレパートリー)までの文字番号は、オクテット00から7F(7ビットUS-ASCII値)に対応します。直接的な結果として、プレーンなASCII文字列は有効なUTF-8文字列でもあります。
✅ ASCII混同なし
US-ASCIIオクテット値は、UTF-8エンコードされた文字ストリーム内で他の方法では現れません。これにより、US-ASCII値に基づいて解析するが他の値に対して透過的なファイルシステムや他のソフトウェア(例えば、Cライブラリのprintf()関数)との互換性が提供されます。
✅ 変換の容易性
UTF-8と他のエンコーディング形式との間の往復変換は容易です。
✅ シーケンス長の指示
マルチオクテットシーケンスの最初のオクテットは、シーケンス内のオクテット数を示します。
✅ 制限されたバイト値
オクテット値C0、C1、F5からFFは決して現れません。
✅ 文字境界の認識
文字境界は、オクテットストリーム内の任意の場所から簡単に見つけることができます。
✅ ソート順の保持
UTF-8文字列のバイト値辞書式ソート順は、文字番号で順序付けした場合と同じです。もちろん、文字番号に基づくソート順は文化的に有効であることはほとんどないため、これは限定的な関心事です。
✅ 高速検索アルゴリズム
Boyer-Moore高速検索アルゴリズムは、UTF-8データと共に使用できます。
✅ 認識可能性
UTF-8文字列は、単純なアルゴリズムによってかなり確実にそのように認識できます。つまり、他のエンコーディングの文字列が有効なUTF-8として現れる確率は低く、文字列の長さが増加するにつれて減少します。
UTF-8の歴史 (History of UTF-8)
UTF-8は、1992年9月にKen Thompsonによって考案されました。Rob Pikeが指定した設計基準に導かれ、Plan9オペレーティングシステムで非破壊的な方法で使用可能なUCS変換形式を定義することを目的としていました。Thompsonの設計は、X/Open Joint Internationalization Group XOJIG([FSS_UTF]参照)によって標準化を通じて推進され、その過程でFSS-UTF(バリアントFSS/UTF)、UTF-2、そして最終的にUTF-8という名前を冠してきました。