ActiveScriptRuby で WAVE DASH 問題にハマる

Windows 7 に ActiveScriptRuby 1.8.7 をインストールして使っているんだけど、Oracle+JDBCではよくあるWAVE DASH問題的な問題にはまってしまった。

こんな環境で、

> ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]

UTF-8の文字列をShift JISに変換したいだけなんだけど、Iconvを使うと文字列の中に FULLWIDTH TILDE (U+FF5E) がある場合にエラーになってしまう。

require 'iconv'
Iconv.conv 'SHIFT_JIS', 'UTF-8', [0xff5e].pack('U')

Iconv::IllegalSequence: "\357\275\236"
        from (irb):7:in `conv'
        from (irb):7
        from :0

Macだとこちら d:id:kyut:20081229:1230519610 にあるように SHIFT_JIS ではなく CP932 を指定すれば良いみたいだけど、ActiveScriptRuby では CP932 を指定しても結果は同じ。どうも現在の ActiveScriptRuby に入っている iconv はバージョンが古く(1.9.1)、どこかのバージョンで取り込まれた(?)CP932 指定時の U+FF5E ⇒ 波ダッシュ への変換ができないらしい(手元の Snow Leopard は iconv 1.13 で、CP932 がうまく動く)。

どうしようもなさそうなので結局信頼と伝統のNKFを使うようにした*1

require 'nkf'
NKF.nkf '-sW8m0', [0xff5e].pack('U') # => "〜"

*1:単にコマンドライン丸出しのインタフェースが何となく好きになれないので Iconv にしていただけだったので