ブログ
日本語

Unicode 正規化 — NFC・NFD・NFKC・NFKD変換(Macの濁点分離も修正)

テキストとファイル名のUnicode正規化ツール(macOSの分解されたファイル名にも対応)

ブラウザー内で処理・アップロード不要

正規化の形式

Macで作ったファイル名(通常はNFD)で、濁点・半濁点やアクセントが分かれてしまったテキストを直すならNFCを選んでください。

テキストを変換

例は、macOSがファイル名を保存するときと同じく分解した形(NFD)で入っています。見た目は同じでも、比較すると別の文字列になります。

  • 分解されたハングルの字母 0個
  • NFKCで変わる互換文字 0個

NFCに変換しました:26コードポイント → 23

結果
Résumé – データ report.pdf
コードポイントを表示
変換前
U+0052 U+0065 U+0301 U+0073 U+0075 U+006D U+0065 U+0301 U+0020 U+2013 U+0020 U+30C6 U+3099 U+30FC U+30BF U+0020 U+0072 U+0065 U+0070 U+006F U+0072 U+0074 U+002E U+0070 U+0064 U+0066
変換後
U+0052 U+00E9 U+0073 U+0075 U+006D U+00E9 U+0020 U+2013 U+0020 U+30C7 U+30FC U+30BF U+0020 U+0072 U+0065 U+0070 U+006F U+0072 U+0074 U+002E U+0070 U+0064 U+0066

ファイル名をまとめて修正

ファイル名を1行に1つずつ貼り付けるか、ファイルを選ぶと、正規化した名前のZIPとしてダウンロードできます。ファイルはブラウザーの外に送信されません。

Unicode標準の附属書15(UAX #15、Unicode Normalization Forms)を、ブラウザーのString.prototype.normalizeで適用します。NFCとNFDはテキストの見た目も意味も変えません。NFKCとNFKDは、全角英字(A→A)、丸数字(①→1)、単位記号(㎏→kg)といった互換文字も変換するため、見た目が変わることがあります。ZIP内のファイル名はUTF-8で保存します。

Unicode 正規化ツールとは

見た目が同じテキストを、内部的にも同じにするためのツールです。同じ文字でも保存の仕方は1通りではありません。「デ」は1つのコードポイントで表すことも、「テ」と結合用の濁点の組み合わせで表すこともできます。「é」も、1つのコードポイントか「e」と結合用のアクセントの組み合わせのどちらでも書けます。2つの形が混ざると、検索で見つからない、同じ名前のファイルが2つできる、アップロードを拒否されるといった問題が起きます。テキストやファイル名を貼り付けて正規化の形式を選べば、統一された形で出力できます。

使い方

  1. 形式を選びます。macOSで分解されたテキストを直すならNFCを選んでください。
  2. 最初の欄にテキストを貼り付けます。すぐに結果が表示され、分解されたハングルの字母と互換文字の数も表示されます。
  3. 「コードポイントを表示」を開くと、変換前後の値を比べられます。
  4. ファイル名の欄では、名前を1行に1つずつ貼り付けるか、ファイルを選びます。
  5. ファイルを選んだ場合は、正規化した名前のZIPをダウンロードします。

仕組み

  • Unicode標準の附属書15(UAX #15、Unicode Normalization Forms)の4つの形式を、ブラウザーのString.prototype.normalizeで適用します。
  • 分解されたハングルとして数えるのは、結合用の字母(U+1100〜U+11FFと拡張ブロック)です。ㅋのようにキーボードで入力する互換用の字母は、分解された文字として数えません。濁点・半濁点の分離はこの数には含まれませんが、NFCへの変換では同じように1文字にまとまります。
  • 互換文字とは、NFKCの形がNFCの形と異なる文字のことです。
  • ZIP内のファイル名はUTF-8で保存し、ファイルの中身は再圧縮せずに格納します。一度に扱えるのは200ファイル・500 MBまでです。スマートフォンやタブレットではZIPをメモリー上で作るため、150 MBまでになります。

例

入力 形式 結果
cafe + U+0301(5コードポイント) NFC café(4)
café NFD cafe + U+0301
分解された データ.txt(8コードポイント) NFC データ.txt(7)
A①㎏fi NFKC A1kgfi
ガギ NFKC ガギ
㈱ NFKC (株)

よくある質問

Macから受け取ったファイル名で濁点が分かれてしまうのはなぜですか?

macOSはファイル名を分解した形(NFD)で保存するため、「デ」は「テ」と結合用の濁点に、éはeと結合用のアクセントに分けて保存されます。Windowsのアプリやウェブのフォームによっては、これを分かれたまま表示したり、別の文字列として扱ったりします。NFCに変換すると元どおり1文字にまとまります。

パソコンにあるファイルの名前を直接変更できますか?

ウェブページからディスク上のファイル名を変更することはできません。ファイルを選んで、正規化した名前のZIPとしてダウンロードするか、修正した名前の一覧をコピーしてください。

NFCとNFKCの違いは何ですか?

NFCは等価な文字をまとめるだけなので、見た目も意味も変わりません。NFKCはさらに、全角英数字、半角カタカナ、丸数字、fiのような合字、㎏のような単位記号といった互換文字を普通の文字に置き換えるため、見た目が変わることがあります。

2つの文字列は見た目が同じなのに、何が問題なのですか?

NFCとNFDのテキストは同じに見えても、比較すると別の文字列として扱われます。そのため検索、重複チェック、アップロードがうまくいかなくなります。「コードポイントを表示」を開くと、実際の値を確認できます。

何かアップロードされますか?

いいえ。正規化もZIPの作成もブラウザー内で行います。

ほしいツールはありますか?