ブログトップ 記事一覧 ログイン 無料ブログ開設

Mac OS Xの文字コード問題に関するメモ このページをアンテナに追加 RSSフィード

2010-08-26

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


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

f:id:NAOI:20100826151635p:image

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

f:id:NAOI:20100826151651p:image


  • ここで正規化する意図はわかる。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にペーストしても正規化されない。

f:id:NAOI:20100826151725p:image

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

f:id:NAOI:20100826151744p:image

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

f:id:NAOI:20100826151801p:image

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

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