Rubyの勉強(1)
気象庁が公開している気象データを使って、どうにかできないかなと遊んでます。
とりあえず、以下のサイトを参考にプロトタイプを作成したいと思います!
まず、気象データをデータベースに保存するっぽい。
とりあえず、RubyでMySQLに接続する方法を確認するために、既にある情報をフェッチしてみよう。
文字化け
サーバ上でMySQLからデータを取得し、表示しようとすると文字化けしてしまうという問題が発生…
発生している問題としては、以下のとおり。
# ruby xxxx.rb
??????????????
??????????
?????????
?????
?????????? ?????
データベースが問題!?
phpMyAdminからデータベースの構造を確認しても、ちゃんと「utf8_general_ci」となってるので問題なさそう。
そうなると、やっぱりソースコードが原因か…
既存のソースコードと比較
前にRubyで作成したメール通知プログラムのソースコードと比較して問題の原因を探してみた。
#!/usr/bin/ruby -Ku require 'kconv' ・ ・ ・
冒頭部分に上の2つが書いていた。
「#!/usr/bin/ruby -Ku」とは!?
答えとなるようなサイトは見つからなかったけど、指定したRubyで実行させるようにしてるっぽい。
意味的には、yumの設定ファイル(/usr/bin/yum)の冒頭文に書かれている
#!/usr/bin/python2.6.6 import sys try: import yum except ImportError: print >> sys.stderr ・ ・ ・
と同じ感じなのかな?
(上のコードでは、Pythonのバージョンを2.6.6に指定している)
「require 'kconv'」とは!?
「kconv」はRubyの文字コードを変換するための標準ライブラリらしいです!
# _*_ coding: utf-8 _*_ require 'kconv' str_sjis = "文字列".tosjis str_utf8 = "文字列".toutf8 puts "#{str_sjis.encoding} => #{str_sjis}" puts "#{str_utf8.encoding} => #{str_utf8}"
参考:Rubyで文字コードを変換 ‘kconv’ | rakkyooの備忘録
以上の2つを試して見ても、問題が解決できず…
解決策
元々、データベースにアクセスし、データを取得するソースコードは以下のようでした。
require 'mysql' hostname = "127.0.0.1" username = "xxxxx" password = "xxxxx" dbname = "xxxxx" connection = Mysql.connect('hostname', 'username', 'password', 'dbname') result = connection.query('SELECT * FROM table_name')
けど、データベースにアクセスする時点で文字コードを設定しなくちゃいけなかったっぽい
修正したソースコードは以下のとおり。
require 'mysql' hostname = "127.0.0.1" username = "xxxxx" password = "xxxxx" dbname = "xxxxx" connection = Mysql.init() connection.options(Mysql::SET_CHARSET_NAME,'utf8') connection.real_connect(hostname, username, password, dbname) result = connection.query('SELECT * FROM table_name')
これで一件落着!
てか、そもそもMySQLに接続する書き方が
connection.real_connect(hostname, username, password, dbname)
とか
connection = Mysql.connect(hostname, username, password, dbname)
があって、よく分からないな…