「齙」的UTF-8是E9BE85,Unicode是U + 9F85。以下代碼沒有按預期工作:將utf-8轉換爲ruby中的unicode
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。
「齙」的UTF-8是E9BE85,Unicode是U + 9F85。以下代碼沒有按預期工作:將utf-8轉換爲ruby中的unicode
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。
應該使用UNICODEBING//
爲目標編碼
irb(main):014:0> Iconv.iconv("UNICODEBIG//","utf-8","齙")[0].each_byte {|b| puts b.to_s(16)}
9f
85
=> "\237\205"
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
這是一個長長的名單,所以我不會在這裏添加它。
你可以試試這個:
「%04X」 % 「齙」 .unpack( 「U *」)[0]
=>「9f85」
ruby的版本對unicode問題很重要,因爲1.9有更好的工具。 – 2011-02-11 05:15:26