本文へスキップ

Unicode正規化

Unicode Normaliser

NFC・NFD・NFKC・NFKDを適用する、Macから来た日本語で濁点が分かれて見た目は同じなのに一致しないときの直し方です。

テキストをUnicodeの4つの正規化形式のあいだで変換し、それぞれが何を変えるかをコードポイントとバイトで見せます。実務で引っかかるのは濁点です。Macで入力した「が」は「か」と濁点に分かれて保存され、Windowsで入力した同じ「が」と比較すると別の値になります。検索やVLOOKUPが何も見つけない理由がこれです。

🔒 ブラウザの中だけで動きますunicodenormalizenfckorean

原文

形

合成済み。ウェブ、Windows、そしてほぼすべてのデータベースが期待する形です。まずはここから。

このタブの外へは出ません。入力のたびに正規化し、四つの形をまとめて計算するので見比べられます。

このテキストには分離したハングル字母が6個あります。

macOS のファイル名の形です。画面では普通の韓国語に見えますが、Windows で打った同じ文字とは不一致になります。検索や VLOOKUP が何も見つけられないのはそのためです。NFC が音節を組み直します。

NFC の結果

四つの形の比較

形変わるかコードポイントUTF-8 バイト戻せるか
NFCはい — コードポイント 0 から2246はい
NFDはい — コードポイント 7 から3789はい
NFKCはい — コードポイント 0 から2444いいえ
NFKDはい — コードポイント 7 から4090いいえ

実務で効くのはバイトの列です。分解された韓国語は音節あたり UTF-8 で 9 バイト、合成された韓国語は 3 バイト。同じ名前がある端末では長さ制限を通り、別の端末では弾かれるのはこれが理由です。

NFC が変えたもの

  • 0番目한글한글コードポイント 6 → 2

使い方

  1. 一致しないテキストを貼り付けます

    分離したハングル字母があるときは、他の何よりも先に件数付きの警告が出ます。分離した濁点にその警告は出ませんが、下の比較表では変わった箇所として見えます。

  2. 理由がなければNFCを使います

    NFCはウェブ・Windows・ほぼすべてのデータベースが期待する合成済みの形です。NFDはmacOSがファイル名を保存する形、NFKCは表示用ではなく検索キーの形です。

  3. 決める前に4つを比べます

    どの形式が実際にテキストを変えるのか、コードポイントとUTF-8バイトがどれだけかかるのか、その変換が元に戻せるのかを表で見せます。

よくある質問

Excelで名前が一致しないのはなぜですか

片方が分解された形、もう片方が合成済みだからです。画面では同じに見えてバイト列が違うので、完全一致の検索が失敗します。両側をNFCに正規化すれば一致します。

NFKCはどこでも使ってよいですか

いいえ。一方向です。㈱は(株)に、①は1に、A はAに、ハンカク はハンカクになり、どれも戻せません。保存して表示するテキストではなく、検索キーや比較に使ってください。

NFCは半角の カ と ゙ を ガ にしてくれますか

いいえ。半角カタカナは互換文字で、音節を組み立てる合成用の文字とは別の文字です。手を付けるのはNFKCだけで、全角に写してから濁点を合成します。

バイト数はなぜ重要なのですか

濁点が分かれた「が」はUTF-8で6バイト、合成済みなら3バイトです。目に見える違いがないまま、同じ名前がある機械では長さの検査を通り、別の機械では引っかかる理由がこれです。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。