Apple Mailが送信する謎のハイブリッドCP932について

  • Apple MailがMacJapanese(90pv)のシステム外字を「ISO-2022-JPもどき」で符号化し、送信することについては、以前に指摘した。今回は、Apple MailがMacJapaneseのシステム外字を「CP932もどき」で符号化し、送信することについて。
  • 符号化のルール自体は単純で、次のようにまとめることができる。「CP932に含まれる文字は、その符号位置となる。また、CP932に含まれない文字のうちMacJapaneseに含まれるものは、その符号位置となる」
  • たとえば「丸付き数字の1」(U+2460 CIRCLED DIGIT ONE)は、CP932に含まれるし(0x8740)、MacJapaneseにも含まれる(0x8540)。この場合、Apple Mailの送信するCP932において、「丸付き数字の1」は(当然だが)0x8740で符号化される。
  • 一方「黒ハートマーク」(U+2665 BLACK HEART SUIT)は、MacJapaneseに含まれるが(0x86A5)、CP932には含まれない。含まれないのだから、charset=CP932では送信できないはずである。ところがApple Mailは、これをcharset=CP932のメールにおいて(MacJapaneseの符号位置である)0x86A5で符号化するのである。自分宛に送信して受信してみると、Apple Mailは「CP932の0x86A5」を、ちゃんと(?)「黒ハートマーク」として表示する。しかし、Apple Mail以外でこれが文字化けしないメーラーが存在するとは考えられない。もちろん、Mac版のShift-JISメーラーであれば、表示用のフォントによっては「黒ハートマーク」を表示することもあるだろうが、その場合は「丸付き数字の1」のほうが化けているという複雑な状況となる。
  • さらにややこしいのが、「括弧付きの日」(U+3230 PARENTHESIZED IDEOGRAPH SUN)などのケースである。「括弧付きの日」は、MacJapaneseに含まれるが(0x8740)、CP932には含まれない。そこでApple Mailは、これを0x8740で符号化するわけだが、CP932の0x8740は「丸付き数字の1」である。したがって、Apple Mailの送信したCP932のメールをApple Mailで受信した場合であっても、「括弧付きの日」は「丸付き数字の1」に化ける。というか、正しく「丸付き数字の1」として表示されてしまう。
  • 簡単な再現方法。Apple Mailでハシゴ高(charset=CP932にするため)と「括弧付きの日」などを含むメールを自分宛に送信。あるいは、実際に送信しなくても下書きとして保存しただけで化ける。
  • といった不思議なCP932が意図的な仕様であるとは到底思えないのだが、バグにしてはわざわざ手間をかけて複雑なことをしているような気もするし、どうなっているのだろう。