【ゆにこーどせいきか】

Unicode正規化 とは?

最終更新:
💡 同じ文字の別表現をそろえる「文字列の整頓」

Unicodeで等価と定められた文字列を、決められた共通の形にそろえる処理。見た目が同じでも内部の並びが違う文字列を比較しやすくします。

📌 このページのポイント
似た見た目を、すべて同じにはしないNFC:正準等価な表現をそろえるか + 結合用濁点304B + 3099がU+304CNFKC:互換等価もそろえる①1NFCなら、①と1の違いは残るNFKCでは、丸付きの区別が失われる
上段の数値はUnicodeのコードポイント。正規化形式は、比較や保存の目的に合わせて選びます。
ひよこ ひよこ
同じ「が」なのに、文字列が一致しないことがあるの?
ペンギン先生 ペンギン先生
あるよ。「が」1つのコードポイントで表す方法と、「か」に結合用の濁点を続ける方法があるんだ。見た目は同じでも、そのまま内部の並びを比較すると一致しない場合があるね。
ひよこ ひよこ
どうやってそろえるの?
ペンギン先生 ペンギン先生
NFCなら、この例ではU+304BとU+3099の2つを、U+304Cの1つにそろえられるよ。逆にNFDなら「が」を分解した表現にするんだ。そろえる形式を両方の文字列で同じにしてから比べようね。
ひよこ ひよこ
NFKCというのも同じようなもの?
ペンギン先生 ペンギン先生
NFKCは互換等価も扱うので、たとえば「①」を「1」に変えるよ。NFCならこの違いは残るんだ。検索で便利な場合はあっても、元の表記の区別が必要な文章に無条件で使うと情報を失うね。
ひよこ ひよこ
正規化すれば、似た文字を全部まとめられるの?
ペンギン先生 ペンギン先生
そういう処理ではないよ。Unicodeが等価と定めた関係に従うので、似て見えるだけの別文字が何でも一致するわけではないんだ。それに、正規化済みの2つの文字列を連結した結果が、同じ正規形とは限らない点にも気をつけよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Unicode正規化」って出てきたら「等価な文字列を、同じ内部表現にそろえる処理」と思えばだいたいOK!
📖 おまけ:英語の意味
「Unicode Normalization」 = Unicode文字列を正規の形にそろえること
💬 normalizationは一定の形にそろえることで、ここではUnicodeが定めた規則を使うんだよ

参考資料

← 用語集にもどる