Unicode 正規化 (NFC, NFD, NFKC, NFKD)
テキスト
同じ見た目のテキストでも異なるコードポイント列で保存されることがあります — é は 1 つの合成文字(U+00E9)の場合も、'e' と結合アクセント(U+0065 U+0301)の場合もあります。Unicode 正規化はテキストを正規形に書き換え、同じに見える文字列が等しく比較され、予測どおりに並び、ファイルシステムやデータベースを往復できるようにします。NFC は最短の合成形に結合(保存・Web のデフォルトに最適)、NFD は完全分解(macOS のファイル名に多い)、NFKC・NFKD はさらに互換マッピングを適用し、合字(fi → fi)、全角文字(2024 → 2024)、ローマ数字(Ⅻ → XII)などを畳み込みます。結合文字を除去してアクセントを完全に取り除くこともできます。比較表は各形式のコードポイント・UTF-8 バイト長を示し、入力がすでにどの形式かを示します — NFC を期待していたのに NFD のデータを見つけるのに便利です。すべてローカルで動作し、テキストはブラウザを離れません。
正規化出力 · 17 文字 · 32 バイト
Café file 2024 Ⅻ ①
入力はすでに NFC 形式です。
全形式の比較
| 形式 | 文字 | バイト | = 入力? |
|---|---|---|---|
| NFC | 17 | 32 | はい |
| NFD | 18 | 33 | いいえ |
| NFKC | 20 | 21 | いいえ |
| NFKD | 21 | 22 | いいえ |
NFC が保存・Web の最も安全なデフォルトです。NFKC・NFKD と符号除去は損失があるので、正確に保つテキストには使わないでください。
使い方
- 入力欄にテキストを貼り付けるか入力します。
- 対象形式(NFC・NFD・NFKC・NFKD)を選び、正規化された出力をコピーします。
- 「発音区別符号を除去」をオンにするとアクセントも除去され、表で入力がすでにどの形式かを確認できます。
よくある質問
- どの形式を使うべきですか?
- NFC が保存・転送・Web で最も安全なデフォルトです — 最短の正規形で、ほとんどのシステムが期待する形式です。システムが分解テキストを要求する場合(例:一部の macOS)は NFD を使います。NFKC・NFKD は合字・全角・上下付き文字の畳み込みなど互換変換を意図的に行いたい場合のみ使ってください — 損失のある変換だからです。
- 「発音区別符号を除去」は何をしますか?
- テキストを分解(NFD)し、すべての結合文字を除去してから選択した形式に再正規化します — 'café' は 'cafe'、'Crème Brûlée' は 'Creme Brulee' になります。ASCII スラッグやアクセント無視の検索キー作成に便利ですが、多くの言語で意味が変わるため、正確に保つ必要のあるテキストには使わないでください。
- なぜ形式間でバイト数が異なるのですか?
- 分解形式(NFD・NFKD)は通常より多くのコードポイントを使います — 合成 'é' は UTF-8 で 2 バイトの 1 文字ですが、'e' + 結合アクセントは合計 3 バイトの 2 文字です。互換形式はどちらにもなり得ます。表で正確なコードポイント・バイト長を比較できます。
- 正規化は可逆ですか?
- NFC ↔ NFD は正規等価性について情報を保存し可逆です。NFKC・NFKD は可逆ではありません — 合字や全角数字が畳み込まれると元の区別は失われます。発音区別符号の除去も一方向です。
関連ツール
Markdown テーブル → CSV 変換
GitHub 形式の Markdown テーブルを CSV、TSV、セミコロン区切りの行に変換します。ブラウザ上で動作します。
Markdown テーブル生成
CSV・TSV・パイプ区切りデータを整列された GitHub 風 Markdown テーブルに変換。
テキスト Diff ビューア
2 つのテキストを行 / 単語単位で比較し、追加・削除をハイライト。
Lorem Ipsum ジェネレーター
段落・文・単語の単位でダミーテキストを生成。
大文字・小文字変換
大文字・小文字・Title・camelCase・snake_case などに変換。
文字数・単語数カウンター
文字・単語・文・行・バイト数をリアルタイムで数えます。