restofwaterimpのぎじゅつMemo

SIerに所属。企画から運用まで幅広くやってます。C#中心に書いてます。

Rubyで文字をasciiからutf-8にする方法

作りながら学ぶ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の設定が煩わしい。

何か、よい策があるような気もするが、コーディングを行いながら気づいていこうかと思う。