いつも調べてしまうので、忘れないようにメモ。
Rubyで日本語を使う時の注意点。
Rubyは、$KCODEというグローバル変数に、どんな文字コード使うのかっていうのが設定されている。簡単に調べた範囲だと下のような感じになるらしい。
SJIS : SHIFT_JIS
EUC : EUC-JP
UTF8 : UTF-8
NONE : ASCII
デフォルトはNONE(設定無し)となっている。
puts "$KCODE=#{$KCODE}" # -> $KCODE=NONE
ASCIIなので、日本語が微妙に化けてしまう。
# SHIFT_JISで保存して実行すると化ける
puts "こんにちはを表示するぜ" # -> こんにちはを侮ヲするぜ
ここまで得た知識を駆使して、プログラムの先頭に$KCODE = “SJIS”追加しちゃうもんねっ!だと文字化けが直らないという”はまりどころ”まで用意してあるのがステキな所だ。
$KCODE="SJIS"
puts "$KCODE=#{$KCODE}" # -> $KCODE=SJIS
# SHIFT_JISで保存して実行すると化ける
puts "こんにちはを表示するぜ" # -> こんにちはを侮ヲするぜ
こいつは、Rubyがプログラムを解釈する段階で、すでに日本語を化けて解釈してしまうかららしい。なので、Ruby様本体に文字コードを指定するらしい。これは、rubyコマンドで実行する際に -Kオプションで指定が出来る。
-Ks : SHIFT_JIS
-Ke : EUC_JP
-Ku : UTF-8
といった感じになる。今回はSHIFT_JISなので、起動の際にruby ?Ks ファイル名で起動すると…
# ruby -Ks ファイル名.rb で実行すると化けない
puts "$KCODE=#{$KCODE}" # -> $KCODE=SJIS
puts "こんにちはを表示するぜ" # -> こんにちはを表示するぜ
ちゃんと日本語が表示されるようになる。
ただ、これだと毎回コマンドラインオプションで指定しないといけないのがめんどくさい。ということで、最終的な解決策として、プログラムの最初の一行に#! ruby -Ksという魔法のコメントを埋め込むことで大丈夫になる。
#! ruby -Ks
puts "$KCODE=#{$KCODE}" # -> $KCODE=SJIS
puts "こんにちはを表示するぜ" # -> こんにちはを表示するぜ
めでたしめでたし。