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では.