10/10/2009

Macの"Mail" 「波ダッシュ」への対応(その1 背景)

「~」と「〜」。同じに見えるだろうか。Macからは同じに見えるが、Windowsからは違って見えるかもしれない。前者のは全角チルダ、後者は波ダッシュ、Unicodeでは異なる文字として扱われている。UTF-8でEF BD 9EとE3 80 9Cだ。そもそも使う目的の違うこのふたつはの文字は、その形状が似ているがゆえにとんでもない混乱をもたらしている。

なぜこんな話を切り出したかというと、友人からリッチテキストで送られてきたメールをMacのメーラーで保存したり返信したりすると、なにやらおかしな動作をするのだ。返信時にはメールの文字コードをわざわざUTF-8にした上、quoted-printableやbase64で変換して送るのである。送信前のメッセージを保存しようとするとエラーが出たりする。おかしな動作の原因がこの「波ダッシュ」のせいだということがわかり、少し調べてみた。

現在ののパソコン用OSは、文字の取扱にUnicodeを使っている。ならば、テキストのエンコードにはすべてUTF-8を用いれば簡単な話だが、パソコンで使われる文字コードにはその歴史ゆえにそう単純にいってない。複雑な事情をはしょって説明すると、Windows NTやMac OS Xが登場する以前、パソコンのスタンダードな文字コードはShift-JISだった。Shift-JISは[8bit]+[8bit]=[16bit]で漢字コードを表現し、アルファベットのASCIIコードとも親和性があった。(ASCIIコードは[7bit+parity bit]=[8bit]というコード体系である。)

一方、初期のインターネットではもともと[8bit]をベースにした文字コードを透過的に通すことができないネットワークだったため、[8bit]+[8bit]=[16bit]のShift-JISはそのままでは通信路に流せなかった。これは8bitの空間でASCIIの7bit目までで定義されていない領域を通信の制御用の文字として割り振っていたためである。通信制御用の機器間で送受されるASCIIコードは8ビット目を見なくても大丈夫だが、8bit目まできっちり定義されている文字コードについては、通信制御文字と誤認識されたり、8bit目が読まれずに文字化けしてしまうのだ。そのような事情から、インターネットで日本語を扱う時には[7bit] JIS(ISO-2022JP)という文字コードを使ってきた。

名前から察することができるように、Shift-JISの文字コードは、JISの文字コードをベースに、通信制御文字と重なることがないように「シフト」させた文字コードだ。文字自体はふたつのコード体系間で1対1で対応させることができる。

インターネットはその後、国際化と同時に通信設備も進化した物と入れ替わり、[8bit]トランスペアレントとなっていくのだが、文字コードについてはUnicodeによって世界中の文字を統一的なコード体系にまとめようという方向に向かう。国際化したパソコンOSの文字システムがUnicodeなのはこの流れだ。しかし、この過程で「波ダッシュ」混乱の火種がまかれる。Unicodeの仕様書において、「波ダッシュ」がこれまでShift-JISで使われていたのとは鏡対象の形状を誤ってサンプルに載せてしまったのだ。その一方で、「全角チルダ」を従来の「波ダッシュ」の形状で載せた。JISで「全角チルダ」の文字コードは定義がない。

ここで我らがMSの登場。WindowsのUnicode採用にあたって、Shift-JISの「波ダッシュ」を本来のUnicodeの「波ダッシュ」は形状が逆であるため、「全角チルダ」に対応するようにしてしまったのだ。こうして、UTF-8で本来の「波ダッシュ」として書かれた文字をWindowsは正しく表示できなかったりするという症状が出始めることとなる。

つづく

0 件のコメント:

コメントを投稿