「龅」のUTF-8はE9BE85で、UnicodeはU+9F85です。次のコードは期待どおりに機能しませんでした。
irb(main):004:0> "龅"
=> "\351\276\205"
irb(main):005:0> Iconv.iconv("unicode","utf-8","龅").to_s
=> "\377\376\205\237"
PS:私はRuby1.8.7を使用しています。
Ruby 1.9+ は 1.8.7 よりも Unicode の処理能力がはるかに優れているため、可能であれば 1.9.2 で実行することを強くお勧めします。
問題の一部は、1.8 が UTF-8 または Unicode 文字が 1 バイトを超える可能性があることを理解していなかったことです。1.9 はそれを理解し、String#each_char のようなものを導入します。
require 'iconv'
# encoding: UTF-8
RUBY_VERSION # => "1.9.2"
"龅".encoding # => #<Encoding:UTF-8>
"龅".each_char.entries # => ["龅"]
Iconv.iconv("unicode","utf-8","龅").to_s # =>
# ~> -:8:in `iconv': invalid encoding ("unicode", "utf-8") (Iconv::InvalidEncoding)
# ~> from -:8:in `<main>'
Iconv で利用可能なエンコーディングのリストを取得するには、次のようにします。
require 'iconv'
puts Iconv.list
長いリストなので、ここには追加しません。
これを試すことができます:
"%04x" % "龅".unpack("U*")[0]
=> "9f85"
UNICODEBIG//
ターゲットエンコーディングとして使用する必要があります
irb(main):014:0> Iconv.iconv("UNICODEBIG//","utf-8","龅")[0].each_byte {|b| puts b.to_s(16)}
9f
85
=> "\237\205"