10/12/2009

Macの"Mail" 「波ダッシュ」への対応(その2 本編)

さて、メールの話である。インターネットのメールには、「[8bit]に透過的でない」通信路に日本語を通すために[7bit+parity bit]+[7bit+parity bit]のJISコードが使われたことで、今でもこれが標準的になっている。WindowsのメーラーもMacのメーラーもLinuxのメーラーも、基本的にプレーン・テキストのメールのやりとりには、ISO-2022JP、すなわちJISコードを使っている。JISコードが使われている限り、Windowsで入力された「波ダッシュ」も、0x2141で表されるため、Macで読み違えることはない。

実際にWindowsのメーラーから送られた「波ダッシュ」を、MacのMailでソース表示させると「$B!A(B」となっている。ここで、「$B」は[16bit]文字の始まりを表す記号で「(B」は終わりを示す記号、ASCII文字で21にあたるのが「!」、41にあたるのが「A」、この一連のコードで、単独の「波ダッシュ」を表す。このことで受け取った文字はMacでも無事に「波ダッシュ」と表示することになる。

逆の場合も同様、Macのメーラーが「$B!A(B」というコードを送れば、Windowsでもそれは「波ダッシュ」と解釈され表示される。た・だ・し、Windowsは受け取ったメッセージを表示する場合、内部的にこの「波ダッシュ」を「全角チルダ」にわざわざ変換していることに注意してほしい。つまり、Windowsのフォントでは、「波ダッシュ」を「波ダッシュ」と解釈すると、正しく表示できない場合があるからだ。(註:「場合」と言うのはVistaのフォント・セットで一部修正されているものがあるらしいからである。)

さあここからがややこしい話。メールではリッチ・テキスト形式、つまりHTML形式を使うことができるのだが、その場合、表示フォントの指定ができる。Windowsの場合、何も指定しなくても英字には「Arial」、日本語には「MS ゴシック」が表示フォントとして指定される。このように表示フォントが指定されていると、MacのMailは「$B!A(B」をわざわざ「全角チルダ」に変換して表示するらしい。Macのフォント・セットでは「波ダッシュ」と「全角チルダ」は同じ形状をしているため、ユーザーは気がつかない。(11/10/2009追記:その後、「全角チルダへの読み替え」はフォントの指定によらないことがわかった。こちら参照。)

さて、一度「波ダッシュ」を「全角チルダ」として解釈したMailは、これに本文を引用して返信したり転送したりしようとするとJISには「全角チルダ」に相当するコードがないため、Unicodeのメッセージとして送ろうとする。Unicodeは[8bit]に透過的でないと送ることができないので、さらに全体をbase64でエンコードして送るのである。

一度「全角チルダ」と読んでしまったものを「波ダッシュ」に戻してJISに変換できないのはどうかとも思うが、プログラムを書く側にとってみれば、一番簡単に表示上の問題を解決する手段だったのだろう。「全角チルダ」を「波ダッシュ」に戻すルーチンを作るには、その「全角チルダ」が元々「全角チルダ」だったのか「波ダッシュ」を一時的に「全角チルダ」に読み直したものなのか判断するルーチンを加えなければならず、プログラムが複雑化する。

このように、つまらないミスがさらにおかしな判断ミスを誘い、結果的にプログラムの実装を複雑化させ、バグの発生を誘発するという、なさけない事情がMacのMailの「波ダッシュ」への対応には見られるのだ。

0 件のコメント:

コメントを投稿