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

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

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

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

Q&A

1回答

320閲覧

RubyのERBでincompatible character encodings: Windows-31J and UTF-8 が発生する

chani-rb

総合スコア13

Ruby

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

0グッド

0クリップ

投稿2018/09/25 10:05

編集2022/01/12 10:55

コマンドプロンプトに下記の一つ目のファイルを入力し、その後webのアドレス欄で2つ目のファイルを実行すると「incompatible character encodings: Windows-31J and UTF-8」が発生してしまいます。
1つ目、

ruby

1# coding: utf-8 2require "webrick" 3config = { 4 :Port => 8099, 5 :DocumentRoot => '.', 6} 7 8# 拡張子erbのEBRを呼び出して、EBRHandlerと関連付ける 9WEBrick::HTTPServlet::FileHandler.add_handler("erb",WEBrick::HTTPServlet::ERBHandler) 10 11# WEBrickサーバークラスのインスタンスを作成 12server = WEBrick::HTTPServer.new(config) 13 14# erbのMINEタイプを設定 15server.config[:MimeTypes]["erb"] = "text/html" 16 17# ctrl-cでサーバの停止 18trap(:INT) do 19server.shutdown 20end 21 22server.start

そして2つ目

erb

1<%# coding: utf-8 %> 2<% require "rubygems" %> 3<% require "dbi" %> 4 5<% dbh = DBI.connect('DBI:SQLite3:fruits01.db') %> 6 7<% sth = dbh.execute("select * from products") %> 8 9<html> 10<body> 11<ul> 12 <% sth.each do |row| %> 13 <% row.each_with_name do |val,name| %> 14 <% name.force_encoding("UTF-8") %> 15 <% val.to_s.force_encoding("UTF-8") %> 16 <li><%= "#{name}: #{val.to_s}" %> 17 18 </li> 19<% end %> 20<hr> 21<% end %> 22</ul> 23 24</body> 25</html> 26 27<% sth.finish %> 28 29<% dbh.disconnect %>

そうすると、webページに「Internal Server Error incompatible character encodings: Windows-31J and UTF-8」となってしまいました。
上手く表示させるにはどこの部分のコードを改変したらいいでしょうか?
コマンドプロンプトに下記の一つ目のファイルを入力し、その後webのアドレス欄で2つ目のファイルを実行すると「incompatible character encodings: Windows-31J and UTF-8」が発生してしまいます。
1つ目、

ruby

1# coding: utf-8 2require "webrick" 3config = { 4 :Port => 8099, 5 :DocumentRoot => '.', 6} 7 8# 拡張子erbのEBRを呼び出して、EBRHandlerと関連付ける 9WEBrick::HTTPServlet::FileHandler.add_handler("erb",WEBrick::HTTPServlet::ERBHandler) 10 11# WEBrickサーバークラスのインスタンスを作成 12server = WEBrick::HTTPServer.new(config) 13 14# erbのMINEタイプを設定 15server.config[:MimeTypes]["erb"] = "text/html" 16 17# ctrl-cでサーバの停止 18trap(:INT) do 19server.shutdown 20end 21 22server.start

そして2つ目

erb

1<%# coding: utf-8 %> 2<% require "rubygems" %> 3<% require "dbi" %> 4 5<% dbh = DBI.connect('DBI:SQLite3:fruits01.db') %> 6 7<% sth = dbh.execute("select * from products") %> 8 9<html> 10<body> 11<ul> 12 <% sth.each do |row| %> 13 <% row.each_with_name do |val,name| %> 14 <% name.force_encoding("UTF-8") %> 15 <% val.to_s.force_encoding("UTF-8") %> 16 <li><%= "#{name}: #{val.to_s}" %> 17 18 </li> 19<% end %> 20<hr> 21<% end %> 22</ul> 23 24</body> 25</html> 26 27<% sth.finish %> 28 29<% dbh.disconnect %>

そうすると、webページに「Internal Server Error incompatible character encodings: Windows-31J and UTF-8」となってしまいました。
上手く表示させるにはどこの部分のコードを改変したらいいでしょうか?

追伸
コマンドプロントのエラーはこのようになっています。

cmd

1[2018-09-25 22:51:18] ERROR Encoding::CompatibilityError: incompatible character encodings: Windows-31J and UTF-8 2 (erb):16:in `concat' 3 (erb):16:in `block (3 levels) in evaluate' 4 F:/ruby2/Ruby24-x64/lib/ruby/gems/2.4.0/gems/dbi-0.4.5/lib/dbi/row.rb:82:in `block in each_with_name' 5 F:/ruby2/Ruby24-x64/lib/ruby/gems/2.4.0/gems/dbi-0.4.5/lib/dbi/row.rb:81:in `each' 6 F:/ruby2/Ruby24-x64/lib/ruby/gems/2.4.0/gems/dbi-0.4.5/lib/dbi/row.rb:81:in `each_with_index' 7 F:/ruby2/Ruby24-x64/lib/ruby/gems/2.4.0/gems/dbi-0.4.5/lib/dbi/row.rb:81:in `each_with_name' 8 (erb):13:in `block (2 levels) in evaluate' 9 F:/ruby2/Ruby24-x64/lib/ruby/gems/2.4.0/gems/dbi-0.4.5/lib/dbi/handles/statement.rb:214:in `fetch' 10 F:/ruby2/Ruby24-x64/lib/ruby/gems/2.4.0/gems/dbi-0.4.5/lib/dbi/handles/statement.rb:240:in `each' 11 (erb):12:in `block in evaluate' 12 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/erb.rb:896:in `eval' 13 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/erb.rb:896:in `result' 14 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/webrick/httpservlet/erbhandler.rb:83:in `block in evaluate' 15 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/webrick/httpservlet/erbhandler.rb:80:in `module_eval' 16 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/webrick/httpservlet/erbhandler.rb:80:in `evaluate' 17 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/webrick/httpservlet/erbhandler.rb:57:in `do_GET' 18 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/webrick/httpservlet/abstract.rb:107:in `service' 19 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/webrick/httpservlet/filehandler.rb:307:in `exec_handler' 20 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/webrick/httpservlet/filehandler.rb:238:in `do_GET' 21 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/webrick/httpservlet/abstract.rb:107:in `service' 22 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/webrick/httpservlet/filehandler.rb:234:in `service' 23 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/webrick/httpserver.rb:140:in `service' 24 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/webrick/httpserver.rb:96:in `run' 25 F:/ruby2/Ruby24-x64/lib/ruby/2.4.0/webrick/server.rb:308:in `block in start_thread' 26::1 - - [25/Sep/2018:22:51:18 東京 (標準時)] "GET /ex2605.erb HTTP/1.1" 500 335

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

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

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

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

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

guest

回答1

0

Ruby

1 <% val=val.to_s.force_encoding("UTF-8") %> 2 <li><%= "#{name}: #{val}" %>

ですかね。

投稿2018/09/25 13:36

otn

総合スコア84423

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

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

chani-rb

2018/09/25 14:09

回答ありがとうございます。 しかし回答通りに記述してみたものの、解決できませんでした。 そしてなぜか、#{val}の部分を消すと、#{name}の部分だけは表示できましたが、#{val}を入れると、エラーが出てしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問