Unicode正規化
Unicode Normaliser
NFC・NFD・NFKC・NFKDを適用する、Macから来た日本語で濁点が分かれて見た目は同じなのに一致しないときの直し方です。
テキストをUnicodeの4つの正規化形式のあいだで変換し、それぞれが何を変えるかをコードポイントとバイトで見せます。実務で引っかかるのは濁点です。Macで入力した「が」は「か」と濁点に分かれて保存され、Windowsで入力した同じ「が」と比較すると別の値になります。検索やVLOOKUPが何も見つけない理由がこれです。
原文
合成済み。ウェブ、Windows、そしてほぼすべてのデータベースが期待する形です。まずはここから。
このタブの外へは出ません。入力のたびに正規化し、四つの形をまとめて計算するので見比べられます。
このテキストには分離したハングル字母が6個あります。
macOS のファイル名の形です。画面では普通の韓国語に見えますが、Windows で打った同じ文字とは不一致になります。検索や VLOOKUP が何も見つけられないのはそのためです。NFC が音節を組み直します。
NFC の結果
四つの形の比較
| 形 | 変わるか | コードポイント | UTF-8 バイト | 戻せるか |
|---|---|---|---|---|
| NFC | はい — コードポイント 0 から | 22 | 46 | はい |
| NFD | はい — コードポイント 7 から | 37 | 89 | はい |
| NFKC | はい — コードポイント 0 から | 24 | 44 | いいえ |
| NFKD | はい — コードポイント 7 から | 40 | 90 | いいえ |
実務で効くのはバイトの列です。分解された韓国語は音節あたり UTF-8 で 9 バイト、合成された韓国語は 3 バイト。同じ名前がある端末では長さ制限を通り、別の端末では弾かれるのはこれが理由です。
NFC が変えたもの
- 0番目
한글한글コードポイント 6 → 2
使い方
一致しないテキストを貼り付けます
分離したハングル字母があるときは、他の何よりも先に件数付きの警告が出ます。分離した濁点にその警告は出ませんが、下の比較表では変わった箇所として見えます。
理由がなければNFCを使います
NFCはウェブ・Windows・ほぼすべてのデータベースが期待する合成済みの形です。NFDはmacOSがファイル名を保存する形、NFKCは表示用ではなく検索キーの形です。
決める前に4つを比べます
どの形式が実際にテキストを変えるのか、コードポイントとUTF-8バイトがどれだけかかるのか、その変換が元に戻せるのかを表で見せます。
よくある質問
Excelで名前が一致しないのはなぜですか
片方が分解された形、もう片方が合成済みだからです。画面では同じに見えてバイト列が違うので、完全一致の検索が失敗します。両側をNFCに正規化すれば一致します。
NFKCはどこでも使ってよいですか
いいえ。一方向です。㈱は(株)に、①は1に、A はAに、ハンカク はハンカクになり、どれも戻せません。保存して表示するテキストではなく、検索キーや比較に使ってください。
NFCは半角の カ と ゙ を ガ にしてくれますか
いいえ。半角カタカナは互換文字で、音節を組み立てる合成用の文字とは別の文字です。手を付けるのはNFKCだけで、全角に写してから濁点を合成します。
バイト数はなぜ重要なのですか
濁点が分かれた「が」はUTF-8で6バイト、合成済みなら3バイトです。目に見える違いがないまま、同じ名前がある機械では長さの検査を通り、別の機械では引っかかる理由がこれです。
ここから渡せます
大文字・小文字変換
Case Converter
UPPER・lower・Title・Sentence・camelCase・snake_case・kebab-case・CONSTANT_CASEのあいだで表記を変えます。
空白の整理
Whitespace Cleaner
行末の空白を落とし、連続した空白を1つにまとめ、タブを変換し、空行を取り除きます。
文字コードの判定・変換
Encoding Detector & Converter
ファイルの文字コードを候補ごとのプレビューで見比べて決め、UTF-8(BOMの有無)・UTF-16・EUC-KR/CP949で保存し直します。
Unicode文字の解析
Unicode Inspector
テキストをコードポイントに分解し、名前・ブロック・用字系とUTF-8/UTF-16のバイト列を示します。
次の一手
このツールが出したものをそのまま受け取れる道具です。
CSVクリーニング
CSV Cleaner
セルの空白を落とし、見出しを揃え、数値と日付の書式を直し、列数の合わない行を報告します。
ハングル初声検索
Hangul Initial Search
ハングルから初声(各文字の頭子音)を抜き出し、初声だけを並べた語で一覧を検索します。
文字コードの判定・変換
Encoding Detector & Converter
ファイルの文字コードを候補ごとのプレビューで見比べて決め、UTF-8(BOMの有無)・UTF-16・EUC-KR/CP949で保存し直します。
Unicode文字の解析
Unicode Inspector
テキストをコードポイントに分解し、名前・ブロック・用字系とUTF-8/UTF-16のバイト列を示します。
見えない文字の除去
Invisible Character Remover
貼り付けた文章に紛れたゼロ幅スペース・BOM・ソフトハイフン・双方向制御文字を見つけて取り除きます。
検索と置換
Find & Replace
文字列・単語単位・正規表現で置換し、キャプチャグループを使って、当たった箇所をすべて事前に確認できます。