Unicode正規化とは

Unicodeは同じ見た目の文字を複数の方法で表現できるように定義しています。例えば、文字「é」は単一の合成済みコードポイント(U+00E9)として保存することも、文字「e」に結合用アクセント記号(U+0065 U+0301)を続けて保存することもできます。どちらも同じように表示されますが、バイト列は異なるため、文字列比較、検索、テキスト処理で問題が発生します。

Unicode正規化は、テキストを正規表現に変換して、同等の文字列を同一にするプロセスです。Unicode標準では4つの正規化形式を定義しています:

  • NFC(正規分解の後に正規合成):合成済み形式。最もコンパクトで、ウェブと大多数のオペレーティングシステムで広く使用されています。
  • NFD(正規分解):完全に分解された形式。各文字は基本文字と結合用記号に分割されます。
  • NFKC(互換性分解の後に正規合成):NFCと同様ですが、互換性文字(例:合字、上付き文字、全角文字)も正規等価物に変換します。
  • NFKD(互換性分解):NFDと同様ですが、互換性分解も適用します。

ツールの説明

このツールはUnicodeテキストをある正規化形式から別の形式に正規化します。ソースと対象の形式を選択し、テキストを貼り付けると、変換された出力が即座に表示されます。

機能

  • 4つの正規化形式すべてに対応:NFC、NFD、NFKC、NFKDをソースと対象の両方としてサポートします。
  • 双方向変換:任意の形式の組み合わせ間で自由に切り替えられます。
  • リアルタイム出力:入力または貼り付けと同時にテキストが正規化されます。
  • あらゆるUnicodeスクリプトに対応:ラテン文字、CJK、アラビア文字、キリル文字、その他あらゆるUnicodeエンコードテキストで動作します。

動作原理

このツールは、選択された対象形式で標準的なJavaScriptのString.prototype.normalize()メソッドを適用します。これはUnicode標準附属書#15で定義されたUnicode正規化の完全な仕様準拠実装です。

ユースケース

  • 文字列比較の修正:テキストを比較またはインデックス化する前に正規化して、見た目が同じ文字列が正しく一致することを確認します。
  • 検索とデータベースの一貫性:ユーザー入力を単一の形式(通常はNFC)に標準化してからデータベースに保存し、エンコーディングのみが異なる重複エントリを防ぎます。
  • 互換性の折りたたみ:NFKCを使用して合字、上付き文字、全角文字を標準等価物に変換し、検索インデックスや自然言語処理に使用します。