Unicode 正規化

同じ文字の異なる表現を統一する処理。NFC, NFD, NFKC, NFKD の 4 形式がある。

Unicode 正規化とは、同じ文字を表す異なるコードポイント列を統一的な形式に変換する処理です。たとえば「が」は 1 つのコードポイント (U+304C) でも、「か」+「゛」(U+304B + U+3099) でも表現できます。

正規化には NFC (合成)、NFD (分解)、NFKC (互換合成)、NFKD (互換分解) の 4 形式があります。Web では NFC が推奨され、JavaScript の String.normalize() で変換できます。Unicode テキスト処理の書籍で正規化の詳細を学べます。

正規化を行わないと、見た目が同じ文字列でも文字列比較で不一致になることがあります。データベースの検索やファイル名の比較で問題が発生する原因になります。

macOS のファイルシステム (APFS/HFS+) は NFD を使用するため、他の OS との間でファイル名の互換性問題が生じることがあります。国際化プログラミングの書籍で正規化の実践的な活用方法が解説されています。