RailsでSJISの一部文字が使えない

RailsSJISの一部文字が使えない。
Rails 2.1 で Shift-JIS - 涅ir槃naのように設定したところ普通の文字は使えるのだが「表」「索」「照」「会」といった漢字が使えない。「憂鬱」とかは使えるのに・・・

どんなエラーになるかというと以下のようなエラーで

SyntaxError in GaraponController#garapon 
C:/temp/sjis/app/controllers/garapon_controller.rb:3: unterminated string meets end of file
C:/temp/sjis/app/controllers/garapon_controller.rb:3: syntax error, unexpected $end, expecting kEND

ソースコードを解析している時点で該当文字(例えば表なら)がでると「\225\」と扱われリテラルが閉じられていないと判断しエラーとなっていると思われる。これはるびま正規表現の回のところと同じような事象だろう。

例えば Shift_JIS で書かれた
p /表/s
というプログラム sample.rb があったとき、そのまま実行するとパース時は $KCODE が "NONE" なので、「表」が "\225\" として扱われて、2 バイト目が「\」なので、正規表現を閉じるはずの「/」がエスケープされてしまって、正規表現を閉じる部分がみつからずに
 % ruby sample.rb
 sample.rb:1: unterminated string meets end of file
 sample.rb:1: syntax error, unexpected tSTRING_END, expecting
 tSTRING_CONTENT or tREGEXP_END or tSTRING_DBEG or tSTRING_DVAR
となり、パースに失敗してしまうことがわかります。

http://jp.rubyist.net/magazine/?0020-BundledLibraries

しかしなんでこれが上記のようになってしまうのがが分からない。
config/environment.rb の先頭で、以下のようにKCODE を SJIS に設定しているのだがこれではダメなのか?

$KCODE = "sjis"

KCODEがだめなら「-Ks」オプションでいってみようと以下のようにしてもだめ

ruby -Ks script\server

ソースファイルもSJISで保存されているのを確かめたのだが、、
何が悪いんだろう。

11/27追記

原因及び対策が分かりました!
ApplicationControllerで&KCODEをうわがけばよい。詳しくは↓
Rails2.1でSJISを使う時に気をつける事 - 自分の仕事を憎むには人生は余りにも短い
追記ここまで


作業のログ及びソース

C:\temp>rails -v
Rails 2.1.2

C:\temp>rails sjis
      create
      create  app/controllers
      create  app/helpers
      …
C:\temp\sjis>ruby script\generate controller garapon garapon
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/garapon
      exists  test/functional/
      create  app/controllers/garapon_controller.rb
      create  test/functional/garapon_controller_test.rb
      create  app/helpers/garapon_helper.rb
      create  app/views/garapon/garapon.html.erb

config/environment.rb

$KCODE = "sjis"
# Be sure to restart your server when you modify this file

RAILS_GEM_VERSION = '2.1.2' unless defined? RAILS_GEM_VERSION
# Bootstrap the Rails environment, frameworks, and default configuration
require File.join(File.dirname(__FILE__), 'boot')

Rails::Initializer.run do |config|
  config.time_zone = 'UTC'
  config.action_controller.default_charset = 'Shift_JIS'
  config.action_controller.session = {
    :session_key => '_sjis_session',
    :secret      => '22739abb466c26ba0c943f24344f1225305fae2b7690e42de9b98b08a1abde841ff806dc0e68d1869db61a763456687aa7b9bf84b54f8d3c48b6983d3784c6ce'
  }
end

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>

app/views/garapon/garapon.html.erb

Garapon#garapon
<%= @word %>

app/controllers/garapon_controller.rb

class GaraponController < ApplicationController
  def garapon
    @word = 'ああああああああ'  #=>ここが「表」だと落ちる
  end
end
広告を非表示にする