Unicode正規化

Unicode正規化（ユニコードせいきか、）とは、等価な文字や文字の並びを統一的な内部表現に変換することでテキストの比較を容易にする、テキスト正規化処理の一種である。一般に、正規化はテキストの文字列を検索や整列のために比較（照合、）するときに重要であるUnicodeの照合仕様は、正規化形式仕様とは別に、Unicode Technical Standard #10 "Unicode Collation Algorithm" で定義される。。

 合成と分解 
Unicodeの正規化手段の基礎は、文字の合成と分解という概念である。文字の合成とは、基底文字と結合文字の組み合わせによる結合文字列を、単一の符号位置である合成済み文字にする手続きである。たとえば、基底文字 n と結合文字 ~ の組み合わせを単独の ñ 文字に変換する、仮名文字と濁点の結合文字の組み合わせを単独の濁点つき仮名とするなど。分解はその逆で、合成済み文字を結合文字列にする。分解は単一の符号位置を別の単一の符号位置に変換することもある。

Unicodeは等価性と呼ばれるものに基づいて文字を合成・分解する。Unicodeには2種類の等価性がある。1つは正準（）と呼ばれ、機能的に等しく視覚的にも識別不可能であるべき文字を識別する。もう1つは互換文字（）と呼ばれ、視覚的に異なり意味的にも異なるかもしれないものを識別する。詳細はUnicodeの等価性とUnicodeの互換文字の記事を参照。

 正規化形式 
Unicode標準附属書UAX#15では正規化に関して4種類の正規化形式を定義している。

+正規化形式の一覧名称（英語）日本語名称説明NFDNormalization Form Canonical Decomposition文字は正準等価性によって分解される。NFCNormalization Form Canonical Composition文字は正準等価性によって分解され、再度合成される。結果として文字の並びが変換前と変わることもありうる。NFKDNormalization Form Compatibility Decomposition文字は互換等価性によって分解される。NFKCNormalization Form Compatibility Composition文字は互換等価性によって分解され、正準等価性によって再度合成される。

上記の手法はすべて、文字の並びが正規化前にすでに分解されている場合も含め、分解された文字の出現順序を標準化する。これらは文字数が変化しなくても、文字や文字の並びを等価な文字やその並びに置き換えることがある。これらは正規化に要求されている符号化の一貫性を達成するために行われる。

 各種OSでの採用状況 
 macOSのファイルシステムHFS+ではNFDの変種が用いられる（U+2000〜U+2FFF、U+F900〜U+FAFF、U+2F800〜U+2FAFFは分解されない）。

 用語の日本語訳 
ここでは日本語表記を原則として Unicode Terminology English - Japanese にならっている。ただし、Combining Character Sequenceの公式日本語訳である「結合文字の並び」は日本語として誤解を与える可能性があるので、そのためあえて「結合文字列」と表記している。

 脚注 

 関連項目 
Unicode
Unicodeの等価性
Unicodeの互換文字
合成済み文字
合字

 外部リンク 
Unicode Standard Annex #15: Unicode Normalization Forms
utf8proc: A library for normalization of Unicode texts

せいきか
せいきか
ru:Юникод#Алгоритмы нормализации