Railsで幸せになるために(文字コード)
Railsで幸せになるためには, とりあえずenvironment.rbに
$KCODE='u'と書いて文字コードをUTF-8にすること,
というのはよく聞くけど, 昨日はそれによって不幸が訪れた。
実は自分の開発環境ではVineLinuxを使ってるんだけど,
ブラウザのデフォルトの文字コードをいくらUTF-8にしても
UTF-8のページは文字化けしてしまう。結局, メニューから
「表示」→「文字エンコーディング」→EUC-JPなんてことを
やんなきゃいけない。こんなことはもちろんやってられないので
application_controller.rbに以下のように記述する。
before_filter :set_charset after_filter :encoding_to_euc private def set_charset @headers["Content-Type"] = "text/html; charset=EUC-JP" end def encoding_to_euc @response.body = Kconv.kconv(@response.body, Kconv::EUC) end
ただ, これでも文字化けするところはあるみたい。昨日はこれでハマった。
いつも発生するわけではないんだけど, たまにlink_toメソッドに渡す文字列が
文字化けする。これはやっぱり内部的にUTF-8を使い, 画面に出力するときにEUC-JPに変換してるからなのかもしれない。
とりあえず, これを解決するにはlink_toメソッドに渡す文字列をkconvを使って
エンコーディングしてやればいい。↓のような感じ。
link_to Kconv.kconv(str, Kconv::EUC)
DRY原則に従ってapplication_helper.rbに↓のように記述すればなお良し。
def kconv_euc(str) Kconv.kconv(str, Kconv::EUC) end