MailやSafariで互換漢字が化ける

  • たとえばテキストエディット(標準テキストモード)で「羽」という字をコピーしてMailの新規メッセージウインドウ(本文)にペーストすると、「羽」に化ける。Safariの入力フォームにペーストした場合も同じ。InDesignでおなじみの「Unicode正規化による互換漢字化け」である。


  • 化ける漢字は、下図のとおり。左のグループの互換漢字が、対応する統合漢字(右のグループ)に置換される*1

  • ここで正規化する意図はわかる。MacファイルシステムであるHFS Plusでは、ファイル名は「分解」方向に正規化されているため、Mac上のテキストは結合文字列を含む可能性が高い。それをMacの外部に出すと適切に表示されないかもしれないので、「出口」であるMail本文やSafariの入力フォームにペーストされるテキストには、「合成」方向の正規化を施しておこうということだろう。
  • ただしAppleはHFS Plusにおいて、基本多言語面(Plane 0)の記号の一部と互換漢字が置換されないよう配慮した、独自のNFD(以下の図では「Modified NFD」と表記する)を採用しているのだから、「合成」方向の正規化においても、同様の配慮が必要だと思われる。実際、Mac OS X 10.5のMailは、このような正規化(以下の図では「Modified NFC」と表記する)を(後述するように、部分的にだが)採用している。
  • 下図は、Mac OS X 10.6でテキストをコピー&ペーストしたときの正規化のされ方についてまとめたもの。NFCで正規化されると(ピンク地)、互換漢字が化ける。理由はわからないが、Safariでコピーした文字は、Mailにペーストしても正規化されない。


  • 下図は、Mac OS X 10.5の場合。コピー元がリッチテキストであれば、Mail本文へのペーストにおいて、互換漢字に配慮した正規化(黄色地)が実行されるが、標準テキストだと通常のNFCで正規化されてしまう。


  • というわけで、かなりややこしいことになっているなあ、というかんじ*2。おそらく、やりたいのは下図のようなことだろうと思うのだけれど。

*1:Plane 2の互換漢字は、AppleのModified NFDでも統合漢字に置換される。

*2:互換漢字の正規化をめぐる問題の根本的な原因である「正規等価の呪い」に関しては、後日書く機会があるかもしれない。