質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

1732閲覧

Ruby - getsで取得した値にのみ文字化けが発生する。

helloboot

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1グッド

1クリップ

投稿2019/06/12 05:22

編集2019/06/12 05:23

前提・実現したいこと

Rubyにて下記のファイルをコマンドにて実行し、getsに
半角英数以外の値を渡すと、なぜか改行が入り、getsで取得した値のみ文字化けしてしまいます。
色々ネットで検索をし、試してみたのですが、一向に解決しないので
質問させていただきました。よろしくお願いいたします。

発生している問題・エラーメッセージ

文字化け

該当のソースコード

puts "あなたが入力した文字は「#{gets.chomp.encode("utf-8")}」です"

試したこと

コマンドプロンプトの文字コードをUTF-8に変えるなど試してみたのですが
変更してファイルを実行すると、getsで取得した値の部分が空欄になってしまいます。
また、当方の環境設定に問題があるのではないかと思い、Rubyをアンインストールし
解説サイトを参照しながら再度インストールしてみたのですが、結果変わらずです。
導入の際はRubyinstallerを使用しました。

補足情報(FW/ツールのバージョンなど)

Ruby-2.5.1

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

おそらく、インストール時に、"Use UTF-8 as default external encoding" にチェックしたんでしょう。この場合、getsに対して日本語を入力するとutf-8と見なされるのですが、実際にIMEで入力されるのはシフトJISなので、化けます。

コマンド実行時に一時的に変えるなら、ruby -EWindows-31J ファイル名とする。
もしくは、スクリプトで1行目に、#! ruby -EWindows-31Jと書く。
もしくは、getsより前に、STDIN.set_encoding "Windows-31J"と書く。

"Use UTF-8 as default external encoding"と指定したのを無かった事にしたいのなら、Windowsの環境変数設定画面で、RUBYOPTというのがあるはずなので、それを削除する。

投稿2019/06/12 06:18

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

helloboot

2019/06/12 13:31

ご回答ありがとうございます。 上記に従い全て実行しましたが、できませんでした。
otn

2019/06/12 13:50

「あいう」と入れたら、どう表示されますか?
helloboot

2019/06/12 14:29

RUBYOPTを削除後、再起動していなかったのですが、 再起動したら表示されるようになりました。 1ヶ月程今回の問題で悩んでいたので、解決できて感激です! この度は誠にありがとうございました。
otn

2019/06/12 14:35

それで解決したのなら、環境変数よりコマンドラインオプションが優先するので、「ruby -EWindows-31J ファイル名」で出来たはずです。タイプミスでもあったんですかね。
helloboot

2019/06/12 14:45

かもしれません。お手数おかけし申し訳ないです。 この度は本当にありがとうございました。
guest

0

もしwin10ならばコンソールのバグらしいです。
レガシ コンソールを利用してください

投稿2019/06/12 06:15

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

helloboot

2019/06/12 14:31

解決しましたが、当方windows10なので非常に参考になりました。 この度はご回答誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問