Apple Mailの方言自動判別?

ISO-2022-JPもどき」の解釈において不寛容(不正な文字はU+FFFD REPLACEMENT CHARACTERとして表示する)な仕様は変わっていない。

  • なぜ間違ったかというと、「ISO-2022-JPもどき」の解釈に一定の条件がある(受信したメールの内容によって結果が変わってくる)ことに気付いていなかったため。この「条件」については後述する。
  • 以下、Shift-JISにおけるシステム外字を単純計算でISO-2022-JPにスライドさせたもの(ISO-2022-JPもどき)のうち、MacJapanese外字(90pv外字)を「Mac方言」、CP932外字を「Win方言」と呼ぶこととする。
  • Mac OS X 10.3 PantherのMailは、Mac方言を送信し、受信したMac方言を表示した。望ましい仕様だとは思わないが、とりあえず一貫性はあった。
  • Mac OS X 10.4 TigerのMailは、Mac方言を送信しておきながら、受信したMac方言の表示を拒否(U+FFFD REPLACEMENT CHARACTERとして表示)した。意味のわからない仕様だった。
  • Mac OS X 10.5 LeopardのMailは、Mac方言を送信しない。そして、受信したMac方言を表示する。下図は、Tiger Mailから送信したMac方言をLeopard Mailで受信、表示したもの。


  • ところでLeopard Mail(およびPanther Mail)は、「ISO-2022-JPもどき」を解釈する際、「Mac方言かWin方言か」の判別を試みているようだ。Mac方言とWin方言の符号位置はかなり重複しており、完全な判別は不可能だが、どうも「Mac方言にないはずの符号を含んでいたらWin方言と見なす」というルールを採用しているらしい。
  • 下図は13区相当のシステム外字を示したもの。CP932ではここにNEC特殊文字が割り当てられている。白地はMacJapaneseでも(もちろん割り当てられている文字は違うが)使われる符号位置。ピンク地はMacJapaneseでは使われない符号位置。グレー地は未定義。


  • 下図は、上図の一部を適当に取り出したもの。16進数はShift-JISの符号位置、括弧内がISO-2022-JPにスライド後の符号。


  • 上図のうち白地の文字のみを含む(つまり、Mac方言であることを否定する要素のない)「ISO-2022-JPもどき」のメールをLeopard Mailで受信した場合、Leopard MailはこれをMac方言として解釈し、表示する(下図、左のウインドウ)。


  • これにMac方言にはない文字が1文字でも加わった場合、Leopard Mailは(たぶん)このメールに含まれるすべての「本来はISO-2022-JPにない符号」を(Mac方言にある文字も含めて)Win方言だと判断し、U+FFFDとして表示する(上図、右のウインドウ)。Win方言だと判断したらWin方言用のテーブルで解釈して表示するのではなく、単に不正な文字として切り捨ててしまうところがおもしろい。いや、この「自動判別」が意図的な仕様かどうかも確かではないのだけれど。