聞くも波ダッシュ、語るも波ダッシュ
業界では「波ダッシュ問題」として有名らしいが、やっと理解した。
これによると、Unicodeの仕様としては「波ダッシュ」と「全角チルダ」が両方存在し、それぞれ文字コードが別で字形も別のものが定義されているらしい。しかも「波ダッシュ」の字形が間違ったまま仕様になってしまったそうだ。ひどい話である。
その結果、Windowsで作ったファイルをLinuxでUTF8に変換し、それをWindowsのブラウザで表示させると見慣れぬ字形となってしまう、というよくある現象になる。
丸数字やローマ数字の文字化けに比べたら実害はないのであまり気にしないことにしていたが、たまたま某所で波ダッシュの文字化けの話がでたので確認してみた。
まず、XP以前のWindowsではUnicode仕様が「忠実に」実装されている、といえる。すなわち、波ダッシュの文字コードに対して波ダッシュの(誤った)字形でフォントが用意されているし、全角チルダの文字コードに対して全角チルダの字形でフォントがある。一方、SJISには1つの字形しかなく、それはUnicodeの「全角チルダ」に相当する。
そこで、XP以前のWindowsでは、単に字形の一致性から、SJISの「波ダッシュ」=Unicodeの「全角チルダ」として扱うこととしたようだ。
ところが、そもそも「波ダッシュ」の字形が誤りであったとすれば、文字コード自体はSJISの「波ダッシュ」=Unicodeの「波ダッシュ」とするのが自然であり、オープンソース系のソフト(nkfとか)はこちらの実装が主流なのだと思われる。これらの実装方式の相違によって、文字化けが発生するわけだ。
さて、WindowsもVistaからは、「波ダッシュ」の字形が変更され、「全角チルダ」の字形が表示されるようになった。しかしWikipediaの記載があるように、文字コードの扱いについては従来と変わらない。おそらく今後変更されることもないだろう。影響範囲の大きさを考えると、そもそものミスの原因があまりにもくだらないだけに、もうちょっとなんとかならなかったのかと思う。