Rubyで半角文字を全角に変換する
jcode.rbを利用するので 1.8系までだけど・・・
# coding: utf-8 require 'jcode' hankaku = 'アイウエオ-12345' NKF.nkf('-WwXm0', hankaku).tr("!-~\s", "!-〜 ")
Linux系ならこれで構わないんだけど、ここで変換した文字列をファイルに出力してWindowsのエディタで開くと
みごとに全角ハイフンが文字化けしてくれる。
原因を調べてみると、どうやらUTF-8において全角ハイフンを表すコードは複数あるようで、上記のコードで変換
すると「e2 88 92」というコードに変換される。
Windowsではこのコードが表示できないために文字化けが発生している。
とりあえずの対応として、変換後の文字列に含まれる全角ハイフンのコードをWindowsでも表示できるものに書き換える
# coding: utf-8 require 'jcode' hankaku = 'アイウエオ-12345' NKF.nkf('-WwXm0', hankaku).tr("!-~\s", "!-〜 ").gsub(/\xe2\x88\x92/, "\xef\xbc\x8d")
これ以外にもWindowsで表示できないコードに変換されてしまう問題はきっとあるんだろうけど、
なんかスマートに変換する方法ないかな・・・