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

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

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

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

1回答

760閲覧

[Ruby]コマンドプロンプトで日本語を入力するとうまくいかない

sokenbicha

総合スコア0

Ruby

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2021/10/12 11:23

#前提 
今現在、著:秋山智俊『恋するプログラム - Rubyでつくる人工無能』という本を読んでいます。この本自体がruby1.9で記述されており以下のサイトを参考にRuby2.7.4でサンプルコードを実行させたところうまく作動しませんでした。
https://b0npu.hatenablog.com/entry/2015/12/29/005538
#コード
コマンドプロンプトで入力した言葉を「~ってなに?」と聞き返すプログラムです。

Ruby

1class Responder 2 def initialize(name) 3 @name = name 4 end 5 6 def response(input) 7 return "#{input}ってなに?" 8 end 9 10 def name 11 return @name 12 end 13end 14 15class Unmo 16 def initialize(name) 17 @name = name 18 @responder = Responder.new('What') 19 end 20 21 def dialogue(input) 22 return @responder.response(input) 23 end 24 25 def responder_name 26 return @responder.name 27 end 28 29 def name 30 return @name 31 end 32end 33 34def prompt(unmo) 35 return unmo.name + ':' + unmo.responder_name + '>' 36end 37 38puts('Unmo System prototype :proto') 39proto = Unmo.new('proto') 40while true 41 print('>') 42 input = gets 43 input.chomp! 44 break if input == '' 45 46 response = proto.dialogue(input) 47 puts(prompt(proto) + response) 48end

#実行結果

Unmo System prototype :proto >konnichiha proto:What>konnichihaってなに? >konbanwa proto:What>konbanwaってなに? >こんばんわ proto:What>������΂��ってなに? > C:\Users\User\Desktop>

#問題点
英文を入力すると問題なく応答するのですが、日本語で入力すると反応がなくもう一度enterを押すと文字化けしプログラムが中断されてしまいます。
文字コードによる問題でしょうか?よろしくお願いします。

ちなみにrubyをインストールする際use utf-8 as default external encodingにチェックを入れてあります。

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

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

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

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

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

guest

回答1

0

細かいことは調べないと思い出せませんが、WindowsのWindows10以降の現在のコマンドプロンプトの日本語処理とRubyの日本語処理がうまく連携できていません。

コマンドプロンプトの左上クリックで、プロパティーのオプションで「レガシーコンソールを使用する」にチェックして、コマンドプロンプトを再起動します。
その状態で、ruby -Ecp932 ファイル名と、外部エンコーディングをCP932にして起動します。

レガシーコンソール(Windows10より前のコマンドプロンプト)だと、新機能がいろいろ使えないので、必要に応じて切り替えてください。

投稿2021/10/12 11:48

otn

総合スコア84808

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

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

sokenbicha

2021/10/12 12:02

回答ありがとうございます。 実際に試したところincompatible character encodings: Windows-31J and UTF-8 (Encoding::CompatibilityError)といったエラーが発生しました。 考えてはいるものの解決方法が思いつきません... よろしければ回答のほうをお願い致します。
otn

2021/10/12 12:33

外部エンコーディングをCP932にしたので、getsの結果もCP932です。 案1:gets.encode("utf-8")で、utf8に変換する 案2:プログラム全体をCP932にする
sokenbicha

2021/10/12 14:18

ありがとうございます。試してみます。 ubuntuでファイルを実行したところうまく作動したのでこれからはubuntuで作業していこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問