Macの濁点・半濁点問題とは?NFCとNFDの違いと対処法

Macの濁点・半濁点問題とは?NFCとNFDの違いと対処法

3分で読める テック

WEBアプリケーションの開発時に、あるモデルのタイトルで検索する機能を作成していた際に起こった問題についてです。

起きたこと

検索フォームから入力された文字列に対して、タイトルが一致するモデルを返すような実装をし、動作確認。

アルファベットなどは問題なかったのですが、どうも濁点があるものについて検索がうまく動作しませんでした。

Macの濁点、半濁点問題

調べてみると、Macの濁点と半濁点問題というものを見つけました。

  • Macの文字コードは「UTF-8-Mac」というNFDの変種が使われている。
  • UTF-8-Macでは、濁点・半濁点文字、例えば「プ」を「フ」と「゜」、「ブ」を「フ」と「゛」の二文字を合成して表現する。

文字コードとは

Unicodeは「符号化文字集合」と言われ、世界中の文字を集め、それぞれの文字に対して番号をつけて管理したものです。

この符号化文字集合をコンピュータで扱うには、符号化形式に従って数値変換します。このときの符号化の方法として、UTF-8、UTF-16などがあります。

NFC/NFDとは

このUnicodeでは、1つの文字を表すのに複数の文字を組み合わせることができます。例えば「うぉ」とか「が」とかですね。

この際に、検索や置換のしやすさから合成した文字を一意な記号で表現したいため、正規化が行われます。

この正規化の方式がNFC、NFDになります。

  • NFC: Normalization Form Canonical Composition(合成済の文字)
  • NFD: Normalization From Canonical Decomposition(複数文字を結合した文字列)

Macのファイルシステム HFS Plus

MacではHFS+(Mac OS 拡張フォーマット)というファイルシステムが使用されています。

このHFS+では、NFDに正規化されて文字が処理されるのです。

これが原因で濁点の場合に引っかかったり引っかからなかったりする場合があるようです。

日本語の名前で検索する場合には、検索フォームから送られる文字列とファイル名を正規化してから照合する必要がありそうでした。

参考

質問・リクエストを送る

記事についての質問や、取り上げてほしいテーマがあればお気軽にどうぞ。いただいた質問はブログ記事として回答し、Q&Aページで公開することがあります。