2011-01-06 12 views
5

Znalazłem słownik chińskich znaków w Unicode. Próbuję zbudować bazę Postacie nie z tego słownika, ale nie wiem jak przekonwertować Unicode do znaku ..Konwertuj Unicode na postać z rubinem

p "国".unpack("U*").first #this gives the unicode 22269 

Jak konwertować 22269 powrotem do wartości znaku, który byłby przeciwny powyższej linii.

+2

Jaka wersja Ruby używasz? – Phrogz

+0

Mam rvm, więc to nie ma znaczenia. Wszelkie sugestie, w tym 1.9.2 są mile widziane. – s84

+1

Jeśli konwertujesz dużo tekstu, możesz zajrzeć do modułu Ruby [IConv] (http://ruby-doc.org/stdlib/libdoc/iconv/rdoc/index.html), który jest częścią rdzenia biblioteka. [rubydoc.info] (http://rubydoc.info/stdlib/iconv/1.9.2/frames) również ma dokumenty. A James Edward Grey zrobił fajny artykuł o nazwie [Encoding Conversion With iconv] (http://blog.grayproductions.net/articles/encoding_conversion_with_iconv). Zaletą IConv jest możliwość transliteracji, tj. Zmiany na podobne wyglądające postacie lub zignorowanie, gdy nie ma dopasowania, więc konwersja pogarsza się w kontrolowany sposób. –

Odpowiedz

11
[22269].pack('U*') #=> "国" or "\345\233\275" 

Edit: Pracuje w 1.8.6+ (zweryfikowane w 1.8.6, 1.8.7 i 1.9.2,). W wersji 1.8.x otrzymujesz trzy bajtowy ciąg znaków reprezentujący pojedynczy znak Unicode, ale użycie puts powoduje, że w terminalu pojawia się poprawny chiński znak.

+0

To działa, dziękuję! Czy masz rozwiązanie dla wersji 1.8.7? – s84

+3

@Sam Wygląda na to, że nie ma znaczenia, z której wersji korzystałeś. (Patrz edytuj) :) – Phrogz

+0

Wygląda na to, że ruby ​​działało to przed aktualizacją Unicode – s84

12

Ruby 1.9:

p "国".codepoints.first #=> 22269 
p 22269.chr('UTF-8') #=> "国" 
+0

NoMethodError: niezdefiniowana metoda "codepoints" dla "国": String – s84

+0

@Sam Z której wersji ruby ​​korzystałeś? – steenslag

+0

Próbowałem 1.8.7 i 1.9.2 – s84