Rails 2.1 で Shift-JIS

Rails 2.1 で、DBもビューもSJISの場合に、旧来の方法が使えることを確認した。


おさらい。


config/database.yml で、encoding を sjis に設定。

development:                         
  adapter: mysql                     
  encoding: sjis                     
  database: sjisapp_development      
  username: root                     
  password:                          
  socket: /var/run/mysqld/mysqld.sock


config/environment.rb の先頭で、KCODE を SJIS に設定。

$KCODE = "sjis"


レイアウト(app/views/layouts/application.html.erb) はこんな感じで。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
    <title>SJISサイト</title>
  </head>
  <body>
    <%= yield %>
  </body>
</html>

いつも W3C のトップページからぱくってカスタマイズしてる。

他のビューファイルもCP932で保存。
コントローラーやモデルでも日本語リテラル書く場合はCP932で保存。


app/controllers/application.rb で、before_filter かまして、HTTPレスポンスヘッダ Content-Type の値で SJIS だと告げるようにする。

class ApplicationController < ActionController::Base
  ...

  before_filter :set_charset

  protected
  def set_charset
    headers["Content-Type"] = "text/html; charset=Shift_JIS"
  end
end


こんだけ。


追記:

もっとスマートだろう解決策を書きました。