ruby 1.9 における文字列のエンコーディング

Kconv.kconv がなんかへたって使えないぞどうなってるんだ・・・とか思って調べていたら、どうやら ruby 1.9 から、各文字列が符号化方式の情報を持ち、保持している符号化方式の参照や、異なる符号化方式への変換等が行えるようになったらしい。
符号化方式の参照は、String#encoding プロパティを用いて行う。

print "こんにちは、世界!".encoding
# ==> #<Encoding:Windows-31J> (例

符号化方式の情報は書き換え可能で、String#force_encoding メソッドを用いて行う。force_encoding は符号化方式を表す文字列を一つ受け取り、符号化方式の情報を指定した符号化方式に書き換え、文字列自身を返す。文字列のデータに対する変換は行わず、単に符号化方式に応じて解釈を変えるだけのようだ。

p "こんにちは、世界!".force_encoding("UTF-8").encoding
# ==> #<Encoding:UTF-8>

文字列の符号化方式から、異なる符号化方式への変換は、String#encode メソッドを用いて行う。

p "こんにちは、世界!".encode("UTF-16BE")
# ==> "0S0\x930k0a0o0\x01N\x16uL\xFF\x01"

つまりは、force_encoding と encode を組み合わせば、KConv.kconv の様に入力符号化方式と出力符号化方式を指定して符号化方式の変換を行えるわけだ。これらの新機能がどの位の符号化方式に対応しているかどうかは知らないけど、とりあえず必要だった 'Shift_JIS' と 'UTF-16BE' には対応していたので、有り難く使わせてもらった。
ruby 1.9ソースコードを覗けば、対応している符号化方式のリストが手に入りそうだけど、ちょっとそれをやるのは面倒だなぁ・・・