search
LoginSignup
4

More than 5 years have passed since last update.

posted at

Ruby1.9時代の文字化け対策 (その1)

そろそろ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_externalEncoding.default_internalの値を参考に出力や入力時のエンコーディングを決定する。

Encoding.default_… の値は Encoding.locale_charmap の値を元に決定し、local_charmapは環境変数LANGの値等を参考に決定される。

File.open 時にエンコーディングが未指定の場合、Encoding.default_externalの値が読み込んだ文字列のエンコーディングに採用される。

設定例

MacやUnixであれば環境変数LANGが適切に設定されていればシェルのエンコーディングと一致するため、特に気にする必要は無いです。

Windowsの場合は、使用するシェル(cmd? cygwin? git bash?)のエンコーディングと環境変数LANGの値を合わせておけば日本語の入出力で化けるようなことが無くなるはず。

続きます。

参考文献

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4