Unicode正規化
Unicode正規化(ユニコードせいきか、英語: Unicode normalization)とは、等価な文字や文字の並びを統一的な内部表現に変換することでテキストの比較を容易にする、テキスト正規化処理の一種である。一般に、正規化はテキストの文字列を検索や整列のために比較(照合、英語: collation)するときに重要である[1]。
合成と分解
Unicodeの正規化手段の基礎は、文字の合成と分解という概念である。文字の合成とは、基底文字と結合文字の組み合わせによる合成列を、より文字数の少ない合成済み文字にする手続きである。たとえば、文字 n と合成用の ~ 文字を単独の ñ 文字に変換する、かな文字と濁点の結合文字を濁点つき仮名とするなど。分解はその逆で、合成済みの文字を分割してその構成要素に戻す。
Unicodeは等価性と呼ばれるものに基づいて文字を合成・分解する。Unicodeには2種類の等価性がある。1つは正準(英語: Canonical)と呼ばれ、機能的に等しく視覚的にも識別不可能であるべき文字を識別する。もう1つは互換文字(英語: Compatibility Character)と呼ばれ、視覚的に異なり意味的にも異なるかもしれないものを識別する。詳細はUnicodeの等価性とUnicodeの互換文字の記事を参照。
正規化形式
Unicode標準附属書 UAX#15 では正規化に関して4種類の正規化形式を定義している。
名称(英語) | 日本語名称 | 説明 |
---|---|---|
NFD Normalization Form Canonical Decomposition |
正規化形式D | 文字は正準等価性によって分解される。 |
NFC Normalization Form Canonical Composition |
正規化形式C | 文字は正準等価性によって分解され、再度合成される。結果として文字の並びが変換前と変わることもありうる。 |
NFKD Normalization Form Compatibility Decomposition |
正規化形式KD | 文字は互換等価性によって分解される。 |
NFKC Normalization Form Compatibility Composition |
正規化形式KC | 文字は互換等価性によって分解され、正準等価性によって再度合成される。 |
上記の手法はすべて、文字の並びが正規化前にすでに分解されている場合も含め、分解された文字の出現順序を標準化する。これらは文字数が変化しなくても、文字や文字の並びを等価な文字やその並びに置き換えることがある。これらは正規化に要求されている符号化の一貫性を達成するために行われる。
各種OSでの採用状況
参考資料
用語の日本語表記は原則として次にならった。“Unicode Terminology English - Japanese”. Unicode, Inc. 2010年1月1日閲覧。
脚注
- ^ Unicodeの照合仕様は、正規化形式仕様とは別に、Unicode Technical Standard #10 "Unicode Collation Algorithm"で定義される。