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