Rubyで全角チルダ・波ダッシュフォント問題にハマる

なんか,全角チルダ「〜」が文字化けするという苦情が来ました.
Linux上のRubyで文字処理をして,Windowsユーザに提供するプログラムを書いた時の話です.
調べると,こんな感じに,確かに妙に文字が変化しました.

// Shift_JISに変換したあとに,UTF-8に変換して表示してみる
# ruby -e 'require "kconv"; a="〜"; print a.tosjis.toutf8,"\n";'
〜


// JISに変換したあとに,UTF-8に変換して表示してみる
# ruby -e 'require "kconv"; a="〜"; print a.tojis.toutf8,"\n";'
〜

// EUCに変換したあとに,UTF-8に変換して表示してみる
# ruby -e 'require "kconv"; a="〜"; print a.toeuc.toutf8,"\n";'
〜

うう...はてな記法だと,勝手にフォントが変わってしまう...一番目と三番目の「〜」は,全角チルダじゃなくて,波ダッシュ(WAVE DASH)です.

調べると,これは有名な問題らしく,Wikipediaにも項目がありました.
波ダッシュ - Wikipedia

じゃあ,これは無理やり.もし全角波ダッシュだったら,自動変換に任せずに,無理やり全角チルダに直してしまう.

# ruby -e 'require "kconv"; a="〜".toeuc.toutf8;printf("%X%X%X\n",a[0],a[1],a[2]); a[0]=0xef; a[1]=0xbd; a[2]=0x9e; print a,"\n";'
E3809C
〜

Webで調べると情報が錯乱してますが,以下が正しいようです.少なくともWindows+UTF-8では.

0xE3809C→波ダッシュ
0xEFBD9E→全角チルダ