今まではずっとSJISを意識せずに使っていたのだが、Googleカレンダーの予定を取得しようとして文字化けに直面した。試行錯誤の結果、以下の2点がわかった。
- 受け取る文字コードは$KCODE(環境変数?)で指定する
- 文字コードを変換して出力する場合は、kconvライブラリをrequireして、出力する文字列のあとに「.tosjis」のように文字コード変換メソッドを付ける。
以下のコードは、実際にGoogleカレンダーの予定を「UTF-8」で取得し、「SJIS」に変換して出力している。
$KCODE = 'UTF-8'
require 'kconv'
require 'gcalapi'
# アカウントメールアドレス
mail = "xxxxxxxx@gmail.com"
# パスワード
pass = "xxxxxxxx"
# Googleカレンダーの「カレンダー設定」画面から取得した非公開URL
feed = "http://www.google.com/calendar/feeds/xxxxxxxx%40gmail.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic"
srv = GoogleCalendar::Service.new(mail, pass)
cal = GoogleCalendar::Calendar::new(srv, feed)
events = cal.events
events.each do |event|
puts event.title.tosjis
puts event.desc.tosjis
end