RubyでGoogleカレンダーのiCalデータ変換ツールを作成中。
正規表現を使って、データの抽出を行っていたのだが、抽出した文字列が文字化けしてしまい途方にくれる。
解説本を読んでやっと原因が判明。
正規表現のオプションが適切に指定されていなかったためだった。
/\s+/ui
のように、後ろの/の後にオプションを付ける必要がある。
GoogleカレンダーのiCalデータは UTF-8 なので u をつける必要あり。
あと、ローマ数字(ⅠやⅡなど)などのWindows の機種依存文字を含んでいる場合は、文字コードの変換のオプションを変える必要がある。
通常は、
puts Iconv.conv(“SHIFT_JIS” , “UTF-8” , data)
などとするが、
Shift_JIS は cp932 を、 EUC-JP は eucJP-ms を指定する必要がある。
ということをるびまのHPの記事(「標準添付ライブラリ紹介 【第 3 回】 Kconv/NKF/Iconv」)で見つけた。
あぁ、分かってしまうとなんでもないことなんだけどな。[:しくしく:]
もっと勉強が必要だぁ。[:ダッシュ:]
あと、変換したiCalデータをダウンロードさせたいのだが、そのためのHTTPヘッダは、こんな感じ。
puts “Content-Disposition: attachment; filename=\”oyajin.csv\”\n”
puts “Content-Length: 10000\n”
puts “Content-Type: application/octet-stream\n\n”
各行の改行(特に最後の二つの改行)がポイント。これがだめで、エラー(Internal Server Error)が出て結構悩んでしまった。
HTML出力する時のポイントと同じなんだな、これが。注意せねば。
このヘッダの後、実際のデータを puts する。
Content-Lengthの単位と算出方法がわからない。