datetimeの文字化け
Railsで日付を表示させると、
Sun Jul 23 17:30:00 ???? (?W????) 2006
というように文字化けしてしまいましたorz
この文字化けしている箇所をShift-JISで見てみると、
Sun Jul 23 17:30:00 東京 (標準時) 2006
というようになっています。
Webページのエンコードはutf-8なので、文字化けするのは当然なのですが、どうやってこれを解決すればいいのか悩みました。
Rubyの現在時刻を返すTimeオブジェクトを調べてみると、Windowsなど一部の環境では、JSTのようなタイムゾーンを表す文字列がうまく取得できない場合があるようです。
実際に私の環境(WinXP)で、
t=Time.new p t
としてみると、
Sun Jul 23 17:15:21 東京 (標準時) 2006
と表示されます。
この「東京 (標準時)」の箇所が、「JST」になってくれれば良かったのですが。。。
そこで、どこかでTimeオブジェクトで現在時刻を取得している箇所があると思いTimeオブジェクトを使っている箇所を探してみたのですが、みつからず。
予定としては、「東京 (標準時)」の箇所をテーブルに格納しない(もしくはWebに表示しない)ようにしようと思っていました。
と色々なファイルを眺めていると、config/environment.rbの中に
# Make Active Record use UTC-base instead of local time # config.active_record.default_timezone = :utc
という記述を発見。
この2行目のコメントを外してタイムゾーンをUTCにしてWebを表示させてみると
Sun Jul 23 17:30:00 UTC 2006
となり、これで良いのかわらかないですが、とりあえず文字化けを回避することができました。
もう少し、RubyとRailsを勉強した後にもっと良い解決策を探したいと思います。
他の方法など知ってる人がいれば、コメントくださいm(_ _)m