[Ruby] irbにおける文字化け
Rubyを勉強を始めようと思いまして、Active Script Ruby1.8.22をインストールし、irb(Interactive RuBy)を使って簡単な機能の勉強をしていました。
その際、ある特定の場合、日本語が文字化けしてしまう。という分からないことが出てきましたので質問させて頂きます。
一つ目は、
printやputsなどで日本語を表示させようとする場合、
print("")
print("あいうえお")
のように、print("") と入力後、カーソルを移動させ "" の中に あいうえお を入れた後エンターすると以下のように
print("あいうえお")と表示されるところが文字化けしてしまうということです。しかし、それを実行すると、しっかりと あいうえお と表示されます。
irb(main):031:0> print(" 「 、 ヲ ィ")
あいうえお=> nil
これを文字順通りに、
print("
print("あいうえお
print("あいうえお")
のように、print(" の後に、あいうえお を入力。その後括弧閉じすると以下のようにしっかりと、print("あいうえお")と表示されます。
irb(main):032:0> print("あいうえお")
あいうえお=> nil
どちらの実行結果も変わらず、しっかりと あいうえお と表示されるのですが、やはり命令入力の段階での文字化けが気になります。
二つ目は、
配列の文字化けです。
waza = ["殴る", "蹴る", "強く殴る", "強く蹴る"]といれてエンターすると、以下のように配列の中の日本語が文字化けします。
(また、これも当然一つ目のprintやputsのように、
waza = ["殴る", "蹴る", "強く殴る", "強く蹴る"]
を書く際に先に
waza = ["", "", "", ""]
と書いた後、カーソル移動で日本語入力すると、命令の部分も文字化けします。以下に載せているのは、命令部分が文字化けしないように左から順に書いていったものです。)
irb(main):022:0* waza = ["殴る", "蹴る", "強く殴る", "強く蹴る"]
=> ["\211\243\202\351", "\217R\202\351", "\213\255\202\255\211\243\202\351", "\
13\255\202\255\217R\202\351"]
irb(main):023:0> 5.times do
irb(main):024:1* waza.each do |w|
irb(main):025:2* print(w)
irb(main):026:2> print(" ")
irb(main):027:2> end
irb(main):028:1> print("\n")
irb(main):029:1> end
殴る 蹴る 強く殴る 強く蹴る
殴る 蹴る 強く殴る 強く蹴る
殴る 蹴る 強く殴る 強く蹴る
殴る 蹴る 強く殴る 強く蹴る
殴る 蹴る 強く殴る 強く蹴る
=> 5
これも、printやputsと同じように結果はしっかりと文字化けせず表示されるのです。
使用OSはWindows XP Home Edition version2002 Service Pack 2です。
あまりよく分かっていないため、分かりにくく、ややこしい文ですが、回答をお待ちしています。よろしくお願いします。
状況等で詳しく知りたいところや何か分からない所がありましたら質問していただければ幸いです。分かる範囲で答えたいと思います。
参考になるかは分かりませんが、他の文字での文字化け例を下記します。
[1]左から順に入力したputs("こんにちは")
irb(main):035:0> puts("こんにちは")
こんにちは
=> nil
[2]先にputs("")を入力したputs("こんにちは")
irb(main):036:0> puts(" ア ノ ソ ヘ")
こんにちは
=> nil
[3]waza =["", "", "", ""]を先に入力後カーソル移動で日本語入力したwaza = ["殴る", "蹴る", "強く殴る", "強く蹴る"]
irb(main):037:0> waza =[" 」 ・, " R ・, " ュ ュ 」 ・, " ュ ュ R ・]
=> ["\211\243\202\351", "\217R\202\351", "\213\255\202\255\211\243\202\351", "\2
13\255\202\255\217R\202\351"]
irb(main):038:0> waza[0]
=> "\211\243\202\351"
irb(main):039:0> waza[1]
=> "\217R\202\351"
[4]wazaの要素の出力
irb(main):040:0> waza.each do |w|
irb(main):041:1* print(w)
irb(main):042:1> end
殴る蹴る強く殴る強く蹴る=> ["\211\243\202\351", "\217R\202\351", "\213\255\202\2
55\211\243\202\351", "\213\255\202\255\217R\202\351"]
お礼
--noreadlineオプションをつけるとできるようになりました。 たのしいRuby第4版p6にMac OS Xで日本語が正しく入力できない場合、この オプションを付けるように書かれていますが、Windowsでも同じようになるようです。 ありがとうございました。