Rubyプログラムを Ruby 1.9.3 と Ruby 1.8..7 両対応にする方法
Ruby の配布用実行ファイルを作る場合、Windows用では Ruby1.9.3 対応の ocra が便利ですが、Mac/Linux用では Ruby 1.8.7 対応の rubyscript2exe を使うしか方法がありません。同じプログラムを2本メンテナンスするのは大変なので、一本化を検討してみました。
ヤマレコダウンローダーで引っかかったのはエンコードの変換に関わる iconv と encode です。で、その回避法のメモです。
エンコードの変換
プログラムの冒頭で Ruby のバージョンを確認して、iconv をインクルードするか否かを指定します。
if /^1\.8/.match(RUBY_VERSION) require 'iconv' end
実際に文字コードを変換する部分では、
if /^1\.8/.match(RUBY_VERSION) html = Iconv.iconv('UTF-8','EUC-JP',html)[0] else html = html.encode("UTF-8","EUC-JP") end
のように Ruby のバージョンに応じてエンコードの変換を使い分けします。