2011-08-07 7 views
17

में स्ट्रिंग वर्ण में यूनिकोड कोडपॉइंट को कनवर्ट करें मेरे पास ये मान यूनिकोड डेटाबेस से हैं लेकिन मुझे यकीन नहीं है कि उन्हें मानव पठनीय रूप में अनुवाद कैसे करें। इन्हें क्या कहा जाता है?रूबी

यहाँ वे हैं:

  • U+2B71F
  • U+2A52D
  • U+2A68F
  • U+2A690
  • U+2B72F
  • U+2B4F7
  • U+2B72B

मैं इन्हें वहां पढ़ने योग्य प्रतीकों में कैसे परिवर्तित कर सकता हूं?

+0

@Gabriel मैं पता नहीं तुम क्या यूसीएस -2 के बारे में कहने की कोशिश कर रहे है? यह "प्रतीक एन्कोडिंग" नहीं है। यह एक अप्रचलित धारावाहिक योजना है जो अब यूनिकोड पर काम नहीं करती है, और यूनिकोड 1.1 के बाद से नहीं है, जो हमेशा के लिए अनन्तकाल है। – tchrist

उत्तर

34

के बारे में कैसे:

puts ["2B71F".hex].pack("U") 

संपादित

रूबी 1.9 में आप भी ऐसा कर सकते हैं:

puts "\u{2B71F}" 

अर्थात \u{} भागने अनुक्रम का उपयोग यूनिकोड कोडपॉइंट को डीकोड करने के लिए किया जा सकता है।

+0

वाह, बहुत बहुत धन्यवाद। – s84

+3

आप एक हेक्स शाब्दिक का भी उपयोग कर सकते हैं: '[0x2B71F] .pack 'U''। –

19

U+2B71F जैसे यूनिकोड प्रतीकों को codepoint के रूप में जाना जाता है।

यूनिकोड सिस्टम दुनिया की कई भाषाओं, वैज्ञानिक प्रतीकों, मुद्राओं आदि में प्रत्येक चरित्र के लिए एक अद्वितीय codepoint परिभाषित करता है। यह चरित्र सेट लगातार बढ़ रहा है।

उदाहरण के लिए, U+221E अनंत है।

codepoints हेक्साडेसिमल संख्याएं हैं। प्रति चरित्र हमेशा एक संख्या परिभाषित किया जाता है।

स्मृति में इसे व्यवस्थित करने के कई तरीके हैं। इसे encoding के रूप में जाना जाता है, जिनमें से आम UTF-8 और UTF-16 हैं। रूपांतरण और फ्रो अच्छी तरह से परिभाषित किया गया है।

यहां आप शायद यूनिकोड codepoint से UTF-8 वर्णों को परिवर्तित करने की तलाश में हैं।

codepoint = "U+2B71F" 

आप हेक्स हिस्सा U+ के बाद आने वाले निकालने और केवल 2B71F प्राप्त करने की आवश्यकता। यह पहला समूह कैप्चर होगा। See this

codepoint.to_s =~ /U\+([0-9a-fA-F]{4,5}|10[0-9a-fA-F]{4})$/ 

और आप कर रहे हैं UTF-8 वर्ण हो जाएगा:

utf_8_character = [$1.hex].pack("U") 

संदर्भ:

  1. Convert Unicode codepoints to UTF-8 characters with Module#const_missing
  2. Tim Bray on the goodness of unicode
  3. Joel Spolsky - The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
  4. Dissecting the Unicode regular expression
+0

'$ 1' क्या है? आप 'कोडपॉइंट' का उपयोग कहां कर रहे हैं? – s84

+0

'कोडपॉइंट '" यू + 2 बी 71 एफ "था। इससे केवल "2 बी 71 एफ" निकालने के लिए, मैं इसे एक यूनिकोड रेगेक्स के खिलाफ मेल खाता हूं। "2B71F" निकालने के लिए रेगेक्स में परिभाषित एक समूह है। मैच के बाद, यदि कोई है तो आप इस मामले में $ 1 के साथ इसका उल्लेख कर सकते हैं। [कार्रवाई में रेगेक्स को देखने के लिए इस रूबुलर परमालिंक का पालन करें।] (Http://rubular.com/r/fXocVSS7ZS) –

+2

यूनिकोड, यूटीएफ -8 कोड पॉइंट्स, कैरेक्टर सेट, एन्कोडिंग इत्यादि के बारे में सबसे अच्छे उत्तरों में से एक मैंने कभी पढ़ा है एसओ पर ... और लिंक शानदार हैं। http://www.joelonsoftware.com/articles/Unicode.html विशेष रूप से स्पॉट पर है। – AJP