標準出力に日本語を出したい! だけど OS の文字コードによっては文字化けしちゃう><
例えば、-h のヘルプを日本語で書いたとしよう。そのヘルプを表示するとき、Windows なら SJIS で表示して欲しいし、Linux ならその端末に設定されている LANG の値で表示してほしい。
で、その為の変換自体は NKF 等でやれば良いので、問題は出力先の文字コードを知らないといけないということ。
どうすれば良いか
RUBY_PLATFORM という環境変数を見ると、プラットフォームが分かるらしい*1。強引だけど、これを見て Windows かそうでないかを判定する事にしよう。
これで Windows だったら問答無用で SJIS にする*2。
それ以外は環境変数の ENV['LANG'] を見て文字コードを取得するようにしてみる。
こんな感じのメソッドを作った
def platform_lang lang = "" # Windows だったらSJIS if RUBY_PLATFORM =~ /mswin|mingw|cygwin|bccwin/i lang = "SJIS" elsif ENV['LANG'] lang = "UTF-8" if ENV['LANG'] =~ /utf-8/i lang = "EUC" if ENV['LANG'] =~ /euc/i lang = "SJIS" if ENV['LANG'] =~ /sjis/i end return lang end puts platform_lang
すげーやっつけだけど、Windows と Mac OSX と FedoraCore7 で動作を確認できた。
実はENV['LANG']のフォーマットである、「ja_JP.UTF-8」な部分の "." 以降を取るようにしようか迷ったんだけど、eucJP とかの表記だと文字コードの表現としては使いにくいので見送った。
普通は
どうやってOSの文字コードを拾ってるんですかね?><