TigerのリッチテキストとLeopardのリッチテキスト
- 前々回、前回の補足。Mac OS X 10.5 Leopardでは、リッチテキストの文字セットが変更され、これが文字化けの原因のひとつとなっているようだ。と思うのだが、わたしはリッチテキストの仕様については何も知らないので、今回のエントリの内容には怪しい部分があるかもしれない。
- Tiger上でテキストエディットやJedit Xを用いて作成したリッチテキスト書類では、文字セットは「MacJapanese + Unicode」になる。一方Leopardでは、リッチテキスト書類の文字セットは「CP932 + Unicode」になる。
- 下図は、Jedit Xで「あいう」とだけ入力したリッチテキスト書類を作成し、Tiger環境とLeopard環境で保存(Jedit Xのバージョンは同じ)した上で、16進エディタで開いたもの。文字セットを示すヘッダ(http://msdn2.microsoft.com/en-us/library/aa140301.aspx)が違っているのがわかる。
- 前々回にも使った下図は、JIS X 0208の範囲内の文字のうち、WindowsとMacでUnicodeマッピングが異なるもの。
- 上図はSJIS to Unicodeのマッピングを示しているが、逆にUnicode to CP932、Unicode to MacJapaneseだと下図のようになる。要するに、MacJapaneseの場合、「Win側」の文字については単純に「マッピングなし」になるが、CP932の場合、「Mac側」の文字も「Win側」と同じと見なされて2対1マッピングとなる。というのがCP932的に正しいのかどうかは知らないが、少なくとも「Mac OS XにおけるCP932の実装」では、そうなっている。
- そのようなわけで、Tigerの(「MacJapanese + Unicode」の)リッチテキスト書類では、たとえばU+301C WAVE DASHはMacJapaneseの0x8160に変換され、U+FF5E FULLWIDTH TILDEはそのままUnicodeの符号位置で、異なる文字として保存される。これに対してLeopardの(「CP932 + Unicode」の)リッチテキスト書類では、U+301C WAVE DASHもU+FF5E FULLWIDTH TILDEもCP932の0x8160に変換され、違いがなくなってしまう。ちなみにJedit Xでは設定によってFULLWIDTH TILDEは自動的にWAVE DASHに変換されるが、下図に用いた書類の作成時には、もちろんこのオプションはオフにしてある。