NFKC vs NFKD — 互換合成 vs 互換分解
NFC/NFDとは異なり、互換分解を適用するNFKCとNFKDについて学びます。合字、全角文字、特殊記号がどのように変換されるかを理解します。
Core Forms
詳細な説明
NFKC vs NFKD: 互換正規化
NFKCとNFKDは正準正規化に互換分解を追加します。意味的には異なるが視覚的に類似した文字を標準的な等価形式に置き換えます。
互換分解の効果
| 入力 | NFKC/NFKD結果 | 説明 |
|---|---|---|
fi (fi合字) |
fi |
合字を文字に分割 |
A (全角A) |
A |
全角をASCIIに |
½ (分数) |
1⁄2 |
分数を分解 |
Ω (オーム記号) |
Ω |
記号をギリシャ文字に |
NFKCとNFKDの違い
- NFKD: 互換分解のみ(より長い出力)
- NFKC: 互換分解の後に正準合成(より短い出力)
重要な警告
互換正規化は不可逆 — 意味のあるフォーマットの区別を破棄します。fi合字と文字"fi"は一部のコンテキスト(タイポグラフィなど)では意味的に異なります。これらの区別を意図的に破棄したい場合にのみNFKC/NFKDを使用してください。
ユースケース
検索エンジン、ユーザー名検証、セキュリティシステムにとって重要です。視覚的に類似した文字を同一として扱う必要がある場合に使用されます。PythonのNFKCケースフォールドや、PRECIS(RFC 8264)のユーザー名/パスワード準備にも使用されています。