Safariがチルド(チルダ)を波ダッシュに変換するのはやっぱりおかしいと思う件
背景
よく知られているように、Shift_JISのページにフォーム送信する際、Safariはチルド(U+007e TILDE)を波ダッシュ(Shift_JIS 0x8160)に変換する。なぜわざわざこんなことをするのかというと、たぶん、以下のような考えに基づいているのだろう。
MacJapaneseの0x7eはチルドだが、(IANAに登録されている)Shift_JISの0x7eはオーバーラインである。Shift_JISにはチルドが存在しない。チルドが存在しないShift_JISのページにチルドを渡すことはできない。「?」を渡すよりは、似た形の波ダッシュに変換したほうがいくらかマシである。
第1の論点:チルドとオーバーラインの交換可能性
しかし、似た形だからというだけでは、理由として弱い。いずれにせよある程度のブレが避けられないのであれば、MacJapaneseの0x7e(チルド)をShift_JISの0x7e(オーバーライン)と同一視するほうが筋が通っているのではないか。
IANAにおけるShift_JISの定義はJIS X 0208:1997におけるシフト符号化表現を参照しており、シフト符号化表現はJIS X 0201を参照している。そしてJIS X 0201:1997には「OVER LINEの字形の許容範囲」として、送信者と受信者との間で明示的な合意がある場合、OVER LINEにTILDEと同じ字形を使用してもよいと記されている。
この点から、チルドのマッピング先は、波ダッシュ(Shift_JIS 0x8160)ではなくオーバーライン(Shift_JIS 0x7e)とするのが自然であるように思われる。
第2の論点:往復の一貫性・主張の一貫性
Safariは、Shift_JISのページにおける0x7e(オーバーライン)を、チルドとして表示する。すなわち、Shift_JISからUnicodeへの変換において、(Unicodeにはオーバーラインが存在するにもかかわらず)オーバーラインをチルドに置き換えている。これは、フォーム送信時の動作と矛盾する。
「オーバーラインとチルドは異なる」という主張があるのなら、Shift_JISのページにおける0x7e(オーバーライン)をオーバーラインとして表示するのでなければおかしい。
逆に、Shift_JISのページにおける0x7e(オーバーライン)をチルドとして表示してよいと考えるのであれば、フォーム送信時にもチルド(U+007e TILDE)をShift_JISの0x7e(オーバーライン)にマッピングすればいい。往復を繰り返しても符号が変わらないという意味では、このマッピングが最も安定している。
ちなみに、知っていても何の役にも立たない豆知識だが、SafariでShift_JISのページのフォームから(普通にやったのでは波ダッシュに化けてしまう)チルドを投稿するには、U+00U+203e OVERLINEを入力すればいい。SafariはこれをShift_JIS 0x7eにマッピングし(往路)、それをU+007e TILDEとして表示する(復路)。