“龅”的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"
P.S:我使用的是Ruby1.8.7。
答案 0 :(得分:4)
Ruby 1.9+处理Unicode的能力要比1.8.7好得多,因此,我强烈建议尽可能在1.9.2下运行。
部分问题是1.8不理解UTF-8或Unicode字符长度可能超过一个字节。 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
这是一个很长的列表,所以我不会在这里添加它。
答案 1 :(得分:4)
你可以试试这个:
“%04x”%“龅”.unpack(“U *”)[0]
=&GT; “9f85”
答案 2 :(得分:3)
应使用UNICODEBING//
作为目标编码
irb(main):014:0> Iconv.iconv("UNICODEBIG//","utf-8","龅")[0].each_byte {|b| puts b.to_s(16)}
9f
85
=> "\237\205"