NFC vs NFD — 正準合成 vs 正準分解
NFC(正準合成)とNFD(正準分解)の違いを理解します。各形式をいつ使うべきか、アクセント付き文字がどのように変換されるかを学びます。
Core Forms
詳細な説明
NFC vs NFD: 2つの正準形式
NFCとNFDは2つの正準正規化形式です。正準等価なテキストを生成しますが、文字の保存方法が異なります。
NFD: 正準分解
NFDは合成済み文字を基底文字と結合マークに分解します:
| 入力 | NFD結果 | コードポイント |
|---|---|---|
é (U+00E9) |
é |
U+0065 + U+0301 |
ñ (U+00F1) |
ñ |
U+006E + U+0303 |
ü (U+00FC) |
ü |
U+0075 + U+0308 |
NFC: 正準合成
NFCはまず分解(NFDと同様)してから、可能な場合に合成済み形式に再合成します:
| 入力 | NFC結果 | コードポイント |
|---|---|---|
e + ́ |
é |
U+00E9 |
n + ̃ |
ñ |
U+00F1 |
u + ̈ |
ü |
U+00FC |
主な違い
- NFCは文字を結合するため、より短い文字列(少ないコードポイント)を生成
- NFDはより長い文字列を生成するが、結合マークを明示的にする
- どちらも正準等価 — 同じテキストを表現
- NFCはWebコンテンツのW3C推奨
- NFDはmacOS APFSのファイル名で使用
同じ出力になる場合
ASCII のみのテキスト(アクセントや特殊文字なし)では、合成・分解するものがないため、NFCとNFDは同一の出力を生成します。
ユースケース
国際化テキストを扱うWeb開発者にとって不可欠です。W3CはHTMLコンテンツにNFCを推奨し、macOSファイルシステムはNFDを使用します。この違いを理解することで、ファイル処理、フォーム送信、アクセント付きテキストのデータベース保存でのバグを防ぎます。