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を使用します。この違いを理解することで、ファイル処理、フォーム送信、アクセント付きテキストのデータベース保存でのバグを防ぎます。

試してみる — Unicode Normalizer

フルツールを開く