• ベストアンサー

[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"]

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

入力時の表示の問題はRubyそのものではなく、Rubyから呼び出している外部ライブラリの 問題ですので、Rubyでどうこうすればという問題ではないです。 Readline for Windows http://gnuwin32.sourceforge.net/packages/readline.htm つまりそういうものだと思ってあきらめるか、readlineの(Windowsでの)開発者を 捕まえて泣きつくなりしてください。 irb起動時に、rubyインタプリタを起動するのと同じオプションを 与えることができます。 >irb irb(main):002:0> ["ほげ"] => ["\202\202\202\260"] irb(main):003:0> $KCODE = "sjis" => "sjis" irb(main):004:0> ["ほげ"] => ["ほげ"] >irb -Ks irb(main):001:0> ["ほげ"] => ["ほげ"] ということで、文字コードとしてShiftJISを使うということを明示すれば OKです。 いちいち起動時にオプションを与えるのが面倒というのであれば、 .irbrc というファイルを作成してその中にあらかじめ指定しておきたい 設定を記述しておけば起動時にオプション指定する必要はなくなります。 .irbrc の置き場所などはマニュアルを参照してください。 Rubyリファレンスマニュアル - irb http://www.ruby-lang.org/ja/man/?cmd=view;name=irb ~ というのはUnixで使われるシェルで用いられる、ユーザーの ホームディレクトリを表すものです。 Windows版であれば、環境変数 HOMEの値が用いられます。 ~/.irbrc は %HOME%/.irbrc のように読み替えてください。 この環境変数は通常は設定されませんので、ご自分の環境に合わせて 設定してください (HOMEDRIVEとHOMEPATHならあらかじめ設定されていると思います)。

buffoon
質問者

お礼

分かりました。ありがとうございました。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

すでに回答が出ていますが、補足です。 readline.dllの機能については、漢字コードの指定をSJISにすれば良いわけですが、Windowsの場合、ホームディレクトリという概念が希薄なので、.irbrcファイルよりも、環境変数設定で、RUBYOPT を -Ks とセットするのがいいと思います。 「One-Click Ruby Installer for Windows」を使うとそうなります。 別の手段としては、readline.dllを使わないと、一行入力処理はCMDプロンプト用のWindows標準のものになるので、SJISが正常に処理できます(当たり前)。 そのためには irb --noreadline で起動します。ただし一行入力処理がSJISなだけで、ruby自体の動作は -K オプション($KCODE)に従います。 後半についてですが、irbは入力した文の値に対してinspectというメソッドを適用してすべて文字列に変換して表示します。元々文字列の値にinspectメソッドを適用すると漢字コードがNONEの場合、バイト列とみなされ、ASCII印字可能文字でない0x00-0x1Fと0x7F-0xFFは\をつかった8進数で表示されます。また全体が""で囲まれます。 これも、irb --noinspect で起動することで動作を変えることが出来ます。この場合、値が文字列ならばそのままで、文字列でなければto_sメソッドで文字列化して表示されます。 rubyリファレンスのirb,$KCODE,inspect,to_sのあたりを参照。

buffoon
質問者

お礼

補足説明ありがとうございました。 また色々参照しながらやっていこうと思います。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

入力時に化けるのは、ヒストリ機能だとか行編集を行うために使用している readline というライブラリの制限のためです。 要はきちんとWindows上での日本語対応ができていないから。 二番目の問題は、これは文字化けではありません。 何もせずにirbを起動した場合、文字コードの指定がなされてないので 128 以上の値を持つバイトは八進表記で出力されるようになっています。 irb(main):001:0> ["ほげ"] => ["\202\331\202\260"] irb(main):002:0> $KCODE => "NONE" irb(main):003:0> $KCODE = "sjis" => "sjis" irb(main):004:0> ["ほげ"] => ["ほげ"] irb(main):005:0>

buffoon
質問者

お礼

回答ありがとうございます。 Windows上での日本語対応ができていないということは、これはもうこういう仕様なのだとして諦めるしかないのでしょうか? 二つ目のも、 >128 以上の値を持つバイトは八進表記で出力されるようになっています。 という回答から推測するに、そういう仕様だということでしょうか? しかし、 何もせずに起動した場合 とも書かれているので、何か設定した上で起動すれば大丈夫。ということのようにも取れます。 出来れば、Windows上でのきちんとした日本語対応の仕方と、文字コードの指定の方法を教えていただけないでしょうか。お願いします。

関連するQ&A

  • ruby テキストファイル書き出しでの文字化け

    ruby&mac&文字の扱い 初心者です。 mac os 10.6.8 HTMLの情報を読み込みテキストファイルに書き出したいのですが、 ターミナル上、putsではきちんと日本語で表示されるのですが、書き出したあとの txtファイルを開くと文字化けしています。 File.open("test.txt","w") do |file| @s_info.each do |data| puts data[:m_sec] file.puts data[:m_sec] end end よろしくお願いします。

    • ベストアンサー
    • Ruby
  • Rubyについて

    Rubyの環境について: ●Rubyのダウンロード(ruby186-26.exe) 環境変数を設定しました。 テキストエディタを利用せずにRDEをインストールしました。 ●RDEの最新版のファイルをダウンロード(RDE1.1.1_setup.exe) RDEでプログラムの作成と実行してみます。 RDE画面のエディタウィンドウに日本語を入力すると、文字化けになります。そこで、実行してみます。コンソールウィンドウでは、入力した文字が文字化けせずに表示されました。 どうしましたら、エディタウィンドウは文字化けせずに日本語が表示されますか? 困ってます。 ご指導お願いいたします。

  • Ruby 1.9.3でShift-JIS文字列を

    よろしくお願いします。 Rubyでスマフォ(SH-02D)の電話帳のQUOTED-PRINTABLEの文字列を WindowsのShift-JIS文字列に変換してファイルに出力したいのですが putsだと日本語文字列に見えるのですが、printだと[]で囲まれた16進数の (一部は^のように表示されますが)列になってしまいます。 ネットで検索してもprintはそのまま、putsは強制改行があるという 違いしかないように思えるのですがどうすればputsと同じ出力を 強制改行無しに出力できるのでしょうか。 RubyはWindows 7 Professional x64でeclipse INDIGOにAptana Studioを 入れて入力&実行しています。 (プレアデスも入ってます。ソースのエンコードはS-JISです。) sub_column = column[i].split("/;/") quoted_string = sub_column[j].unpack("M") puts quoted_string print quoted_string ---- (抜粋) でputsとprintで見え方が違うのです。

  • ruby日本語表示

    宜しくお願い致します。 rubyでプログラミングを始めました。 windows2000 で "one click installer"のruby185-21をインストールした環境で以下を実行すると文字化けします。 print "表示" 今のところ"表示"以外の日本語は文字化けしていません。なぜ"表示"は文字化けするのでしょうか? 解決方法はありますでしょうか? 宜しくお願い致します。

  • 文字化けが直らない?OS9

    OSは9.2.2を使っていて、そこに最近外国語フォントをインストールしたのですが、それ以来、文字化けしてどうしたらいいか困っています。 具体的には、最初は日本語の部分が全部文字化けしたのですが、アピアランスのフォント設定からOsakaを選択してからは、Finderは正しく表示されるようになりましたが、画面の上にある「ファイル」「編集」「特別」…と言うところとその中身(普段は「新規」「開く」「閉じる」…)は文字化けしたままで、エラーメッセージも文字化けした状態です。アップルメニューのキー配列で文字を入力すると、日本語が出てこないとか、という状態です。アプリケーションを起動すると正しく日本語は出ます。例えば、Simple Textを開くと、日本語入力はできて、上段もきちんと「ファイル」「編集」「フォント」「サイズ」…のように、正しい表示になります。 少し長くなりましたが、こんな状態で文字化けするのです。どこの設定を直したらいいか分かる人いましたら教えて下さい。お願いします。

    • ベストアンサー
    • Mac
  • Ruby on Railsの文字化けについて

    Ruby on Rails + MySQLでWEBアプリを開発しているのですが、日本語で入力したデータが全て文字化けを起こしてしまい原因が分からず困っています。 ご存知の方是非教えていただけませんでしょうか。 当方素人のため、なるべく分かりやすく解説してくれているページなどありますと嬉しいです。 開発環境は以下です。 OS:MacOSX ブラウザ:FireFOx2 Ruby:1.8.2 Rails:1.2.2 RubyGems:0.9.2 今まで以下に出ている方法を試しましたがダメでした。 http://osakanas.blog19.fc2.com/blog-entry-40.html http://konohaotoshi.blog69.fc2.com/blog-entry-83.html http://mamok.com/2006/11/09/261/ http://sam2.jp/j/20051108.html

  • rubyのアップデートの方法がわかりません

    Rubyの初心者です。Macを使用しています。 macportで1.9をインストールしたのですが、 ターミナルで ruby -v とするとデフォルトでインストールされていた ruby 1.8.7 と出ます。 1.9へのアップデート方法を教えてください。 アップデートしたい理由は、irbで日本語を使用したいからです。 よろしくお願いします。

    • ベストアンサー
    • Ruby
  • Rubyのirbでの漢字入力

    コマンドプロンプトでRubyのirbコマンドを使って漢字入力を行うと、 漢字変換はしてくれるのですが、入力確定のためにEnterキーを押すと、 別の文字になってしまいます。 >irb -E Shift_JIS なども試してみたのですがうまくいきません。 何か設定の仕方とかあるようでしたら御教示ください。

    • ベストアンサー
    • Ruby
  • エクセル文字化け

    エクセル文字化けでの質問です Window2000Server英語版OSでRegionalOptionで日本語を選択し使用しています。 その上に英語のアプリケーションソフトを使用し、日本語を入力して使用しています。英語アプリはMS Excel 5での出力が可能です。 以前は、エクセル97(日本語)を入れていたときは、特に文字化けはなかったのですが、エクセルを、エクセル2003(日本語)に入れ替えた時点で 英語は見えるのですが、日本語が全て文字化けするようになりした。 なにかフォントの問題でしょうか?

  • Rainlendarの文字化け

    外国のカレンダー表示ソフト「Rainlendar 0.21」を使おうと思って日本語化しましたが、 イベントリストを書き込んで、その上にマウスを置くと出てくるポップアップの表示が、文字化けしてしまいます。 ほかのところは、スキンのフォントを変えて、できましたが、そこだけは、文字化けしてしまいます。 お願いします。

専門家に質問してみよう