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

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

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

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

Q&A

1回答

3945閲覧

incompatible character encodings (UTF-8とWindows-31J)で互換性のない文字コーディングエラーを解決したい

Astromecnaical

総合スコア6

Ruby

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

0グッド

0クリップ

投稿2017/03/22 17:44

###前提・実現したいこと
宜しくお願いします。下記のようなエラーが出ました。
ユーザーがレビューや名前等を入力した後、確認用に出力されるの時に
下記のエラーメッセージが出現します。

日本語入力して、確認用にも日本語で出力されるようにしたいですが
何卒ご教授の程宜しくお願いします。

###発生している問題・エラーメッセージ
review02.rb:20:in post_review': incompatible character encodings: UTF-8 and Windows-31J (Encoding::CompatibilityError) from review02.rb:73:in <main>'

###該当のソースコード

coding: utf-8

def post_review(a_post)

Define variables

dotline = "---------------------------"

Define hash post

post = {}

#User input field
puts "名前を入力してください"
post[:name] = gets.chomp
puts "ジャンルを入力してください"
post[:genre] = gets.chomp
puts "タイトルを入力してください"
post[:title] = gets.chomp
puts "感想を入力してください"
post[:review] = gets.chomp

puts "名前 : #{post[:name]}\n#{dotline}"
puts "ジャンル : #{post[:genre]}\n#{dotline}"
puts "タイトル : #{post[:title]}\n#{dotline}"
puts "感想 : \n #{post[:review]}\n#{dotline}"

#ユーザーが入力したものをハッシュに入れひとくくりとし、次に配列に入れて番号で管理をする為
a_post << post
#a_postをメソッドの呼び出し元に返す
return a_post
end

def read_reveiw(a_post)

show list

number = 0
a_post.each do |post|
puts "[#{number}] : #{post[:title]}のレビュー"
number += 1
end
puts "見たいレビュー番号を入力してください"
input = gets.to_i #userの番号入力待ち

#post変数に、指定した番号の配列を代入する
post = a_post[input]

#show reviews
dotline = "//////////////////////////////"
puts "名前 : #{post[:name]}\n#{dotline}}"
puts "ジャンル : #{post[:genre]}\n#{dotline}"
puts "タイトル : #{post[:title]}\n#{dotline}"
puts "レビュー :\n#{post[:review]}\n#{dotline}"
end

def exit_appli
exit
end

def exception
puts "無効な数字が入力されました"
end

#Difine an array 配列を使う理由は、ハッシュだけであると、複数回の入力が想定されている以上、Keyに対してのバリューが毎回上書きされてしまい、複数個のレビューを登録することができない為、keyとバリューをくくり、番号で管理できる配列を使う
posts = []

while true do
#Show menu
puts "レビュー数 : #{posts.length}"
puts "[0]レビューを書く"
puts "[1]レビューを読む"
puts "[2]アプリを終了する"
input = gets.to_i

#Conditional branch
if input == 0 then #reviewを投稿する
posts = post_review(posts)
elsif input == 1 then
read_reveiw(posts)
elsif input == 2 then
exit_appli
else
exception
end
end

###試したこと

coding: utf-8 を行頭に上記を記載した

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

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

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

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

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

otn

2017/03/23 00:56

コードはコードブロックで書いてください。具体的には、```Rubyという行と```という行で囲んでください。
guest

回答1

0

文字コードについてよく知らない人が、Windows環境でやるのなら、エンコーディングをutf-8でなくすべてWindows-31J(いわゆるシフトジス)でやったほうがいいかと思います。

平行して、文字コードについても学んでください。

コードの中身は、コードブロックに囲まれてから見ます。

投稿2017/03/23 01:06

編集2017/03/23 03:23
otn

総合スコア84555

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問