Rails2.1でSJISを使う時に気をつける事

昨日のRailsでSJISの一部文字が使えない問題の対策が出来た。
原因はまだ良くつかめていないがenvironment.rbで$KCODEを指定しても各コントローラに来る前に$KCODEが「utf8」に戻ってしまうようだ。

ためしにenvironment.rbで

$KCODE = "sjis" 

としてコントローラーの中で$KCODE出力してみるとUTF8となっているのだ。

class GaraponController < ApplicationController
  def garapon
    p $KCODE     # => "UTF8"となってしまう。
  end
end

おそらくどこかのRailsもモジュールの中で$KCODEをうわがいているのだろう。

対策

状況が分かれば対策は簡単でApplicationControllerの先頭で$KCODEを更にうわがいてやればいい。

class ApplicationController < ActionController::Base
  $KCODE="s" 
  …

これでDBにSJISで入っているデータもコントローラーにSJISで書いたデータもViewにSJISで書いたデータもちゃんと表示することが出来た。
やっと課題クリアです。