Rails 2.2でsjisを使う
既存システムのRails適用における大きな課題の一つはレガシデータベースを取り込むことだが、既存のデータベースは未だにsjis文字セットが主流だ。(少なくとも私の周辺ではそう)
以下、備忘録としてメモ。
手順
1. config\database.yml
development: adapter: oracle_enhanced encoding: sjis database: orcl pool: 5 username: scott password: tiger # host: localhost
最初はencoding:シンボルを修正。
2. config\environment.rb
Rails::Initializer.run do |config| # :略 : config.action_controller.default_charset='Shift_JIS' end
Rails::Initializer.runメソッドのブロックで各種の初期値を設定する。
3. app\views\layouts\model.html.erb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html;charset=Shift_JIS" /> <title>People: <%= controller.action_name %></title> <%= stylesheet_link_tag 'scaffold' %> </head> <body> <p style="color: green"><%= flash[:notice] %></p> <%= yield %> </body> </html>
レイアウトのmetaタグ。これを修正しないとブラウザによって文字セットが勝手に解釈されてしまう。
2.のenvironment.rbを修正することでこのスクリプトが生成される際に@@default_charsetが反映されるのだと期待していたのだが、そうではないようだ。
scaffoldの範疇であれば、最低限この3カ所を修正することでsjis(Shift_JIS)に対応できる。
んー、なんか忘れている感じがするんだよなぁ。
追記:
config/environment.rb
$KCODE = "s"
Ruby内部で文字列を扱う場合は、この指定も必要だったか。