2011-01-06 12 views
5

ユニコードで中国語の辞書を見つけました。ルビでユニコードを文字に変換する

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

どのように逆になる文字値に戻す22269を変換することができます..私はこの辞書のうち文字のデータベースを構築しようとしているが、私は文字にユニコードに変換する方法がわかりません上記の行の

+2

あなたがルビーのどのバージョンを使用していますか? – Phrogz

+0

私はrvmを持っているので、問題ではありません。 1.9.2を含む何か提案は大歓迎です。 – s84

+1

多くのテキストを変換する場合は、コアの一部であるRubyの[IConv](http://ruby-doc.org/stdlib/libdoc/iconv/rdoc/index.html)モジュールを見たいかもしれませんとしょうかん。 [rubydoc.info](http://rubydoc.info/stdlib/iconv/1.9.2/frames)にもドキュメントがあります。 James Edward Grayは、[iconvでのコンバージョンをiconv]という素晴らしい記事をしました(http://blog.grayproductions.net/articles/encoding_conversion_with_iconv)。 IConvの素晴らしい点は、一致するものがない場合には字体を変えることができることです。つまり、類似した文字に変更するか無視することで、変換が制御された形で低下します。 –

答えて

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

編集:(1.8.6で確認し、1.8.7、および1.9.2)1.8.6+で動作します。 1.8.xでは、単一のUnicode文字を表す3バイトの文字列が得られますが、putsを使用すると、正しい漢字が端末に表示されます。

+0

それは、ありがとう!あなたは1.8.7の解決策を持っていますか? – s84

+3

@Sam明らかに、使用しているバージョンは問題ではありませんでした。 (編集を参照してください:) – Phrogz

+0

ルビのようにユニコードのアップグレードの前にこれを持っているように見える – s84

12

のRuby 1.9:

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

NoMethodError: "国"のための未定義のメソッド 'codepoints':String – s84

+0

@SamどのバージョンのRubyを使用しましたか? – steenslag

+0

私は1.8.7と1.9.2を試しました – s84

関連する問題