アプリケーションのバグがあると Sinatra がエラーページを表示してくれるはずなのですが、
Windows7 上で
invalid byte sequence in Windows-31J
としかブラウザに表示されずに困っていました。lib/rack/utis.rb の以下のメソッド内でエラーになっているので、エンコーディングが一致していないことは分かります。
def escape_html(string)
string.to_s.gsub(ESCAPE_HTML_PATTERN){|c| ESCAPE_HTML[c] }
end
config.ru にも app.rb にも
# coding: utf-8
を書いていたのですが。
で、真面目に調べたところ
> ruby -e 'puts Encoding.default_external'
Windows-31J
というのが問題っぽいので、ググってみたら http://d.hatena.ne.jp/yohfee/20100810/1281449589 を発見! これに基づいて config.ru を
config.ru
# coding: utf-8
Encoding.default_external = 'utf-8'
require File.dirname(__FILE__) + '/app.rb'
Application.run!
としたところ、上手くいきました。