作りながら学ぶRuby入門の26章をmac環境でやっていたら、
登録時に、画面ではutf-8だが、webrick経由で、mysqlへ取り込むときのinsert文が
{"id"=>"201122", "title"=>"\xE3\x81\x9F\xE3\x81\x97\xE3\x81\x8B\xE3\x81\xAA\xE3\x81\x93\xE3\x81\xA8", "author"=>"\xE3\x81\x88\xE3\x81\x88\xE3\x81\xAE\xE3\x81\x8B\xE3\x81\xAA\xEF\xBC\x9F", "page"=>"100", "publish_date"=>"20100202"}
[2014-02-17 23:15:13] ERROR Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT
って感じで、asciiで来てしまい、mysqlへ取り込めない状況に
さて、どうしたものかとググルと、force_encodingを使えば行けそうな。
■参考URL
http://qiita.com/yahihi/items/add104d5a0b848f0b5ff
と、いうことで、
dbh.do("insert into bookinfos values('#{req.query['id']}', '#{req.query['title'].force_encoding("utf-8")}','#{req.query['author'].force_encoding("utf-8")}','#{req.query['page']}','#{req.query['publish_date']}');")
を文字に指定することで、正常に登録されるように。
項目名 | 登録データ |
---|---|
id | 2022 |
title | だいじょうぶ |
author | けけけ |
page | 10 |
publish_date | 20120202 |
ただ、これを一個一個気にしながら強制的に文字コードを直さないと行けないとなると、若干Rubyの設定が煩わしい。
何か、よい策があるような気もするが、コーディングを行いながら気づいていこうかと思う。