2011年10月4日19:02 Kazuhiko <kazuhiko / fdiary.net>:
> えーと、さらに調査の結果、encodingによっては上記のワークアラウンドでうま
> く動かないことがわかりました。
>
> 例えば、
>
> $ ruby1.9 -ve 'a="あ";"あ".encode("euc-jp"); $SAFE=4; a.encode("euc-jp")'
> ruby 1.9.3dev (2011-09-23 revision 33323) [x86_64-linux]
>
> ↑これは動きますが、
>
> $ ruby1.9 -ve 'a="あ";"".encode("euc-jp"); $SAFE=4; a.encode("euc-jp")'
> ruby 1.9.3dev (2011-09-23 revision 33323) [x86_64-linux]
> -e:1:in `encode': Insecure operation - encode (SecurityError)
>        from -e:1:in `<main>'
>
> ↑これは動きません。
>
> この「あらかじめロードする」技が、対象となるStringと関係なく動くわけでは
> ないとなれば、残念ながらワークアラウンドになりません。

空文字や ASCII 文字列はエンコーディング変換を要しないので変換ライブラリをロードしません。
なので、空文字では workaround にはなりません。
"\uFEFF".encode(enc) rescue nil
などとすれば任意のエンコーディングでいけるはずです。

-- 
NARUSE, Yui  <naruse / airemix.jp>