2011-01-06 5 views
5

के साथ यूनिकोड को चरित्र में परिवर्तित करें मुझे यूनिकोड में चीनी वर्णों का एक शब्दकोश मिला। मैं इस शब्दकोश से बाहर वर्ण के एक डेटाबेस का निर्माण करने की कोशिश कर रहा हूँ, लेकिन मैं कैसे एक चरित्र को यूनिकोड में परिवर्तित करने को पता नहीं है ..रूबी

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

कैसे 22269 वापस चरित्र मूल्य जो विपरीत होगा में बदल सकते हैं उपरोक्त रेखा का।

+2

आप रूबी किस संस्करण का उपयोग कर रहे हैं? – Phrogz

+0

मेरे पास आरवीएम है इसलिए इससे कोई फर्क नहीं पड़ता। 1.9.2 सहित कुछ भी सुझाव स्वागत है। – s84

+1

यदि आप बहुत सारे टेक्स्ट को परिवर्तित कर रहे हैं तो आप रूबी के [आईसीओएनवी] (http://ruby-doc.org/stdlib/libdoc/iconv/rdoc/index.html) मॉड्यूल को देखना चाहेंगे, जो कोर का हिस्सा है पुस्तकालय। [rubydoc.info] (http://rubydoc.info/stdlib/iconv/1.9.2/frames) में दस्तावेज़ भी हैं। और जेम्स एडवर्ड ग्रे ने एक अच्छा लेख किया [आइकन के साथ एन्कोडिंग रूपांतरण] (http://blog.grayproductions.net/articles/encoding_conversion_with_iconv)। आईसीओएनवी के बारे में अच्छी बात यह है कि यह कोई मिलान नहीं होने पर, समान दिखने वाले पात्रों में परिवर्तित हो सकता है, या अनदेखा कर सकता है, इसलिए आपका रूपांतरण नियंत्रित तरीके से घटता है। –

उत्तर

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

संपादित: 1.8.6+ (1.8.6, 1.8.7 में सत्यापित, और 1.9.2) में काम करता है। 1.8.x में आपको एक सिंगल यूनिकोड चरित्र का प्रतिनिधित्व करने वाली तीन-बाइट स्ट्रिंग मिलती है, लेकिन puts का उपयोग करके उस पर सही चीनी चरित्र टर्मिनल में दिखाई देता है।

+0

यह काम करता है, धन्यवाद! क्या आपके पास 1.8.7 का समाधान है? – s84

+3

@ सैम जाहिर है इससे कोई फ़र्क नहीं पड़ता कि आप किस संस्करण का उपयोग कर रहे थे। (संपादन देखें) :) – Phrogz

+0

ऐसा लगता है कि रूबी ने यूनिकोड अपग्रेड – s84

12

रूबी 1.9:

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

NoMethodError: "国" के लिए अपरिभाषित विधि 'कोडपॉइंट्स': स्ट्रिंग – s84

+0

@ सैम आपने किस रूबी का उपयोग किया था? – steenslag

+0

मैंने कोशिश की 1.8.7 और 1.9.2 – s84