前提・実現したいこと
SQLite3とRubyを使った、タスク管理ページを作っています。
SQLite3に登録したタスク内容を、ブラウザで表示したいのですが、文字化けしてしまいます。
発生している問題・エラーメッセージ
DBに登録したタスクを取得して、1つずつチェックボックス形式でブラウザ上に表示したいのですが、文字化けしてしまいます。
### #!/usr/bin/env ruby # encoding: utf-8 begin require "cgi" cgi = CGI.new require "sqlite3" print cgi.header("text/html; charset=utf-8") #未達成のタスクをチェックボックス形式で表示 unfinished_task = [] db = SQLite3::Database.new("tasks.db") db.transaction(){ db.execute("SELECT name FROM mytbl WHERE state=0;"){|t| unfinished_task.push("<div><input type='checkbox' name='unfinished_task' value=#{t}>#{t}</div>") } } print <<EOF <html> <head> <meta charset = "utf-8" /> <title>レポート進捗</title> </head> <body> <h1>レポート進捗管理板</h1> <h3>みんなの進捗状況</h3> <h3>あなたの進捗状況</h3> <h3>残りのタスク</h3> 終わったらチェック&送信! <form action = "finished_task.rb" method="post"> #{unfinished_task.join("\n")} <input type="submit" value="送信"> </form> <h3>終わったタスク</h3> <h3>タスクの追加</h3> <form action = "new_task.rb" method="post"> 新しく登録するタスク名を入力してください<br> <input type="text" name="new_task"> <input type="submit" value="登録"> </form> </body> </html> EOF rescue => ex print <<-EOB <html> <body> <pre>#{ex.message}</pre> <pre>#{ex.backtrace}</pre> </body> </html> EOB end
データベースの中身は
「name」「state」の2つのカラムが用意されており、
「state」の値が0であるものの「name」をひとつずつ取得してチェックボックスで表示したいです。
試したこと
調べると、「文字化けは文字コードの問題」という記載を見かけました。
使用するテキストエディタ(ATOM)ではすべてUTF-8にしています。
他に直さなければいけないことがあるのでしょうか。
それ以外にどうすればよいかわかりませんでした・・・。
ターミナルでデータベースの中身を確認すると、文字化けせず読めました。
補足情報(FW/ツールのバージョンなど)
OSはLinux
エディタはATOM
です
投稿者、プログラミング初心者ですので、足りない情報、わかりづらい表現などあるかもしれません・・・。
申し訳ありませんが、ぜひお力を貸していただきたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/11 06:41
2019/01/11 08:22
2019/01/14 00:57
2019/01/14 01:13
2019/01/15 13:56