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') # => "〜"