"龅"의 UTF-8은 E9BE85이고 유니 코드는 U + 9F85입니다. 다음 코드는 예상대로 작동하지 않습니다.루비에서 utf-8을 유니 코드로 변환합니다.
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이고 유니 코드는 U + 9F85입니다. 다음 코드는 예상대로 작동하지 않습니다.루비에서 utf-8을 유니 코드로 변환합니다.
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"
루비 1.9+는 1.8.7보다 유니 코드를 잘 처리 할 수 있으므로 가능한 경우 1.9.2 미만으로 실행하는 것이 좋습니다.
일부 문제는 1.8에서 UTF-8 또는 유니 코드 문자가 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"
루비의 버전은 유니 코드 문제에 중요합니다. 1.9는 훨씬 우수한 도구를 가지고 있기 때문입니다. –