そろそろRuby1.8のノーマルサポートも終了しますしね・・・
デフォルトエンコーディング
default_encoding.rb
# 環境変数$LANGの値
p ENV['LANG'] # => ja_JP.UTF-8 等
# ロケールエンコーディングを決定するために用いる、locale charmap 名
# $LANG > GetConsoleCP(Winのみ)
p Encoding.locale_charmap
# デフォルトの外部エンコーディング
# コマンドラインオプションの -E / -U / -K > RUBYOPT の -E 等 > shebang の -E 等 > locale
p Encoding.default_external #=> #<Encoding:UTF-8>(Mac), #<Encoding:Windows-31J> (Win)
# デフォルトの内部エンコーディング
# コマンドラインオプションの -E / -U > RUBYOPT の -E 等 > shebang の -E 等 > nil
p Encoding.default_internal #=> nil
OSXでの実行結果
"ja_JP.UTF-8"
"UTF-8"
#<Encoding:UTF-8>
nil
$stdin, $stdout, $stderr はEncoding.default_external
とEncoding.default_internal
の値を参考に出力や入力時のエンコーディングを決定する。
Encoding.default_… の値は Encoding.locale_charmap
の値を元に決定し、local_charmapは環境変数LANG
の値等を参考に決定される。
File.open 時にエンコーディングが未指定の場合、Encoding.default_external
の値が読み込んだ文字列のエンコーディングに採用される。
設定例
MacやUnixであれば環境変数LANG
が適切に設定されていればシェルのエンコーディングと一致するため、特に気にする必要は無いです。
Windowsの場合は、使用するシェル(cmd? cygwin? git bash?)のエンコーディングと環境変数LANG
の値を合わせておけば日本語の入出力で化けるようなことが無くなるはず。
続きます。