すがブロ

sugamasaoのhatenablogだよ

Windowsを舐めてた

実は前からそうなのかな?

一番下に追記アリ
UTF-8で書かれた出力はコマンドプロンプトでもきちんと表示できる!!!(てっきりWin-31Jとかにしないと文字化けすると思っていた)
あ、使っているWindowsはWindows7です。

検証ソース
# encoding: utf-8

str =  "①" # (1) のアレ(はてなにあげたらエスケープされちゃった)
puts "=== source ==="
puts str.encoding
puts str

puts "=== ARGV ==="
ARGV.each do |arg|
	puts arg.encoding
	puts arg
end

もちろん、ソースはUTF-8で保存されている。①に深い意味はない。
ちなみに、UTF-8での出力と合わせて、標準入力からの文字列はどんな文字コードになるかも確認している。

結果(Windows7)


出力はUTF-8にもかかわらずきちんと表示されている。入力は想定通りWin-31Jだ。
これ、いつからこうなったんだろう。だれか詳しい人教えてください(ちょっと気になる)。

結果(Mac)

ターミナルはUTF-8にしているので、当然入力もUTF-8ですね。

つまり

Windowsスゴいし、思い込みは良くないし、いつからこうなったのか興味津々丸ですね……。あやうく老害になるところだった!!

補足


って話をされて、おお、確かに!!と思って確認してみたよ。
入力された文字がどんなコードになっているかを調べるために、こんなコードで検証した。

# encoding: utf-8

str =  "㉑"
puts "=== source ==="
puts str.encoding
puts str

puts "=== ARGV ==="
ARGV.each do |arg|
	puts arg.encoding
	puts arg
	puts "-- beyts --"
	arg.bytes.map{|a| puts "%x" % a}
end

Macでは何事もないように扱えたけれど、Windows7だとこんな感じ。

UTF-8での出力はできるけど、入力はダメっていうか'?'に置き換えられてる感じ。

追記

すごいのWindowsじゃなかったっぽい。
SJISで保存されたファイルと、UTF-8で保存されたファイルを用意して、typeコマンドで表示するとSJISのファイルのみちゃんと表示された。
つまり、Rubyが出力する際に良いように変換している?ような気がする。