CMDのコードページには気をつけろ!

WindowsでWEBアプリを作っていると「縺ョ邨・ォ九※」みたいな画面表示で気が滅入ること、ありませんか?
そんなときは「chcp 65001」とやって、UTF-8 表示にするわけですが(フォントは事前に「MS ゴシック」にしておくこと)、ruby-debug を使っていてちょっとはまってしまったことがあったのでメモしておきます。

現象

CMDで「chcp 65001」にしておいて次のソースを実行します。ソースの文字コードUTF-8でも Shift-JISでも同じです。

require 'ruby-debug'
class Test
  def set
  end
  def get
debugger
  set  # URIの組立て
  end
end
ts = Test.new
ts.get

これを実行すると次のようなエラーが出ます。

C:\Tmp> ruby test1.rb
test1.rb:9
set  # URIの組立て
立て
て
INTERNAL ERROR!!! Permission denied
  c:/ruby/lib/ruby/gems/1.8/gems/ruby-debug-0.10.1/cli/ruby-debug/processor.rb:106:in `write'
  c:/ruby/lib/ruby/gems/1.8/gems/ruby-debug-0.10.1/cli/ruby-debug/processor.rb:106:in `print'
  c:/ruby/lib/ruby/gems/1.8/gems/ruby-debug-0.10.1/cli/ruby-debug/processor.rb:106:in `print_location_and_text'
  c:/ruby/lib/ruby/gems/1.8/gems/ruby-debug-0.10.1/cli/ruby-debug/processor.rb:243:in `process_commands'
  c:/ruby/lib/ruby/gems/1.8/gems/ruby-debug-0.10.1/cli/ruby-debug/processor.rb:171:in `__at_line'
  (eval):5:in `at_line'
  (eval):3:in `synchronize'
  (eval):3:in `at_line'
  c:/ruby/lib/ruby/gems/1.8/gems/ruby-debug-base-0.10.1-mswin32/lib/ruby-debug-base.rb:52:in `at_line'
  test1.rb:9:in `get'
  test1.rb:14

「Permission denied」って、なに?、と小20分ほど悩みました。

解決

同じファイルを「chcp 932」で実行するとエラーは出ません。

C:\Tmp> ruby test1.rb
test1.rb:9
set  # URI縺ョ邨・ォ九※
(rdb:1)

コメントは結構 UTF-8の日本語で書いているので、コードページを切り替えてデバッグするのは危ないですね。