Unicode / 正規化判断ガイド

Unicode正規化で変えてよい文字・残す識別子を判断する

表示だけをそろえる変換と、識別子を変えてしまう変換を分けます。変換前後を確認し、入力の所有者が許可した場合だけ変更します。

先に用途を分ける

変換前形式変換後判断
表示用の全角ABC123NFKCABC123許可があれば変更
互換文字①ÅNFKC要確認
結合文字NFCé表示用なら候補
識別子A-123NFKCA-123原文を保持

正規化形式だけでは安全性は決まりません。用途と入力仕様の所有者を確認します。

fixtureで前後を検算する

fullwidth.txtcompatibility.txtcombining.txtidentifier.txtを読み、expected.csvの変換前後と判断を照合します。実データを送信したり、元の識別子を上書きしたりしません。

const display = text.normalize("NFC");
const compatibility = text.normalize("NFKC");
// Keep the original when it is an identifier.

変えてよいかの確認順

  1. 表示専用か、ID・キー・コード・ファイル名・検索値かを分ける。
  2. 入力仕様にNFC/NFKCなどの形式と許可が明記されているか確認する。
  3. 元の値を残したまま、synthetic fixtureで前後を比較する。
  4. 仕様が不明なら要確認とし、安全な変換だと断定しない。

このガイドはブラウザー内の静的資料です。文字列や入力内容を外部へ送信しません。

識別子は原文を残す

正規化で検索しやすくなる場合でも、識別子の同一性が保たれるとは限りません。元の値と表示用の値を別に持ち、所有者が変更を許可していない限り原文をキーとして使います。