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での採用状況
用語の日本語訳
「合成列」「合成用文字」はUCS(ISO/IEC 10646)の日本語訳であるJIS X 0221で定義されている用語だが、Unicode正規化に用いるのは不適切である。UCSの規格文書はUnicode正規化形式の項でUnicode標準を参照するのみに留めており、解説はされていない。それはUCSの用語体系でUnicode正規化を解説するのが不可能だからである。UCS由来の用語をUnicode正規化に持ち込むのは混乱を招くので、厳に避けたい。
ここでは日本語表記を原則として Unicode Terminology English - Japanese にならっている。ただし、Combining Character Sequenceの日本語訳である「結合文字の並び」は適切とはいえない。Combining Character Sequenceは基底文字と結合文字の並びであって、結合文字のみが並んでいるわけではないからである。そのためあえて「結合文字列」と表記している。
脚注
- ^ Unicodeの照合仕様は、正規化形式仕様とは別に、Unicode Technical Standard #10 "Unicode Collation Algorithm"で定義される。