2010-10-29 17 views
6

में अपनी वर्ण के लिए एक भाग निकले यूनिकोड स्ट्रिंग में कनवर्ट करें मैं निम्नलिखित सामग्री के साथ कुछ पाठ फ़ाइलों को पढ़ने के लिए:माणिक 1.8

\ gushing क्रॉस के u201CThe pedlar लेडी \ U201D

माणिक 1.9 टर्मिनल में, जब मैं इस सामग्री के साथ एक स्ट्रिंग बनाने के लिए: गहरे लाल रंग का 1.8 में

ruby-1.9.1-p378 > "\u2714 \u2714 my great string \u2714 \u2714" 
=> "✔ ✔ my great string ✔ ✔" 

, मैं उनके पात्रों के लिए परिवर्तित यूनिकोड कोड नहीं मिलता:

ree-1.8.7-2010.01 > "\u2714 \u2714 my great string \u2714 \u2714" 
=> "u2714 u2714 my great string u2714 u2714" 

रूबी 1.8 में सही स्ट्रिंग वर्णों को वापस करने का कोई आसान तरीका है?

उत्तर

5

सरल दृष्टिकोण, एक JSON पार्सर उपयोग करने के लिए हो सकता है के रूप में JSON यह बहुत ही स्वरूप का उपयोग करना होता है:, बराबर

irb(main):014:0> JSON '["\u2714 \u2714 my great string \u2714 \u2714"]' 
=> ["\342\234\224 \342\234\224 my great string \342\234\224 \342\234\224"] 
6

किसी और को जो (मेरे जैसे) इस प्रश्न पर ठोकर के लिए एक जवाब की तलाश में रूबी 1.8 में ऐसा करने का तरीका होगा:

["2714".to_i(16)].pack("U*") 
1

यह @ डेव के उत्तर पर बनाता है। मैं इसी चरित्र के साथ एक दिया स्ट्रिंग में सभी यूनिकोड बच दृश्यों को बदलने के लिए निम्नलिखित का उपयोग कर रहा:

string_value.gsub(/\\u([0-9a-fA-F]{4})/) {|m| [$1.hex].pack("U")} 

यह एक नियमित अभिव्यक्ति है कि नज़र रखता है "\ यू" 4 हेक्साडेसिमल प्रतीकों के द्वारा पीछा किया। फिर यह "\ u" को फेंकता है, 4 हेक्स प्रतीकों को एक पूर्णांक में परिवर्तित करता है और यूनिकोड चरित्र प्राप्त करने के लिए पैक का उपयोग करता है। यह प्रत्येक भागने अनुक्रम को इसी चरित्र के साथ बदल देता है और परिणामी स्ट्रिंग देता है।

यदि आपकी स्ट्रिंग आगे निकलती है तो यह आपको परेशानी देगा (उदाहरण के लिए "\" "\\" से बच निकला है)। लेकिन वेनिला मामले में इसे ठीक काम करना चाहिए।