コマンドプロンプトからの標準入力の文字コードは?

昨日も同様の記事を書きましたが、コマンドプロンプトからの標準入力の文字コードは何か?という問題。
というのも、こんなプログラムを作って、標準入力から「あいうえお」と打ちみます。

# -*- coding: Shift_JIS -*-
puts $1 if gets =~ /(.*?)/

期待値は「いうえ」なんですが、実際は、

sample.rb:2:in `

': incompatible encoding regexp match (Shift_JIS regexp with Windows-31J string) (Encoding::CompatibilityError)

となります。
コマンドプロンプトのプロパティを見ると、

現在のコードページ:932 (ANSI/OEM - 日本語 Shift-JIS)

とあります。一応、標準入力の文字コードを調べるため、次のプログラムで実験。

  puts gets.encoding

標準入力に「あいうえお」と打ち込むと「Windows-31J」とでました。
なるほど。エラーメッセージの通りですね。rubyプログラムはShift_JISだと宣言しているのに、渡ってきた文字コードWindows-31Jだと。Windows-31JShift_JISよりIBMやNECの文字が扱える分広いので互換がないという判断なんですね。多分、逆だったらうまくいったはず。
というわけで、rubyのmagic commentの内容をShift-JISからWindows-31Jに変更することで動きました。なお、cp932でも同様に動作しましたが、MS932はダメでした。