強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Mac で PDF からコピーした濁点/半濁点付きの文字列を Firefox に貼り付けた時におかしくなる問題の対処方法

さっさと解決したい人向けの解説

変換ツール作ったんでここで変換。

詳細説明

PDFで濁点や半濁点の文字をコピーし、Firefoxの検索窓などに入力したり、フォームに貼り付けると以下の様に濁点の部分が分離した様な描画になります(Macの場合)。

原因についてざっくりと言うとUnicodeによる文字の正規化の種類の違いです。

Unicodeの場合には例えば「ダ」という文字を表現する時に「ダ」という文字としての表現の他にも「タ」と濁点の「 ゙」を組み合わせて表現(※)する事も可能です。
※これは合成や合成列と呼ばれます。(参考サイト http://tama-san.com/?p=3512 )

この様に複数の表現方法が有ると文字の検索を行う時に単体で表現されているものと合成文字のパターンの両方を考慮した検索ルーチンを作成する必要が有ります。

その様な手間を防ぐ為に正規化という作業を行います。正規化には主に以下の2つパターンが有ります。

  • 全ての文字を「単体で表現される文字(例:ダ)」に正規化する、Normalization Form C(NFC、正規化形式 C)。
  • 全ての文字を「バラバラのパーツで表現される文字(例:タ ゙)」に正規化する、Normalization Form D(NFD、正規化形式 D)

NFCのサンプル】
ガギグゲゴ
パピプペポ

【NFDのサンプル】
ガギグゲゴ
パピプペポ

(2017/03/30 追記)

NFCとNFDのサンプル
http://pollux.sakura.ne.jp/test/unicode/

(追記ここまで)
ここまで聞くと既に分かったかもしれませんが今回の症状はこの「バラバラのパーツで表現される文字」の方への正規化が行われた為に発生した問題だと思われます。

検索をした所、こちらのページでとても分り易く丁寧な解説がされていました。

ウノウラボ by Zynga Japan: Mac OS X上のUnicode
http://labs.unoh.net/2007/09/unicode-on-mac.html

NFDからNFCに変換する為のコードも記載されていましたのでこちらを使わせて頂き、変換ツールを作ってみました。「バラバラなヤツ(合成文字)は嫌だーーっ!!」という方はこちらをご活用下さい。

NFD→NFC変換ツール
http://pollux.sakura.ne.jp/tools/nfd2nfc/

関連情報

紹介マニアどらふと版: Mac OS X におけるファイル名に関するメモ(NFC, NFD等)
http://www.sakito.com/2010/05/mac-os-x-normalization.html

ドラえもん問題 @ Terabithia
http://key2.jp/~yskhashi/wordpress/?p=427