Macの濁点、半濁点問題

開発
この記事を書いた人
井上 周

WEBのバックエンドエンジニア。金沢大学大学院→株式会社マイベスト。
最も得意な言語はRuby(Rails)。その他、GoやPython、TypeScriptsを使った開発を行っています。

井上 周をフォローする

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に正規化されて文字が処理されるのです。

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

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

参考

Macでファイル名をコピペすると濁点と半濁点がおかしくなる - Qiita
2018-01-04 追記PDFからコピペした時など、エディタで普通に変換したくなって試していたところ、もっとシンプルにできました。「選択されたテキストを出力で置き換える」が便利です。概要M…
NFCとNFDに気をつける - Qiita
自分のサイト(AAHub)で起きた問題の備忘録的内容です。NFCとNFDについてです。NFCとNFDについては以下の文字列をどこかのtextareaに貼り付けてみてみてください。NFDと書かれた…
文字コードとは?~UTF-8はパソコンの世界共通語~|データ分析用語を解説 - GiXo Ltd.
本記事は、株式会社ギックスの運営していた分析情報サイト graffe/グラーフ より移設されました(2019/7/1) 目次1 Unicode、ASCIIコード、Shif...
Mac OS X の NFD 問題での対策諸々 - Qiita
おさらい。 ∥ Unicode正規化 - Wikipedia正規化形式NFC: Normalization Form Canonical Compression | 文字に何がくっついていようと…
HFS Plus - Wikipedia

コメント

タイトルとURLをコピーしました