Ruby
Windows
Sinatra

Sinatra が ''invalid byte sequence in Windows-31J" でエラーページを表示しない(@Windows)

More than 3 years have passed since last update.

アプリケーションのバグがあると 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!

としたところ、上手くいきました。