आपकी regex, /\u(....)/
, कुछ समस्याएं हैं।
सबसे पहले, \u
तरह से आपको लगता है यह होता है, 1.9 में आप एक त्रुटि मिल जाएगा और 1.8 में यह सिर्फ \u
जोड़ी है कि आप देख रहे हैं बजाय एक एकल u
से मिलान करेगा काम नहीं करता है; आपको का उपयोग शाब्दिक \u
ढूंढने के लिए करना चाहिए जो आप चाहते हैं।
दूसरा, आपका (....)
समूह बहुत अधिक अनुमोदित है, जो किसी भी चार वर्णों को अनुमति देगा और यह वही नहीं है जो आप चाहते हैं। 1.9 में, आप (\h{4})
(चार हेक्साडेसिमल अंक) चाहते हैं लेकिन 1.8 में आपको ([\da-fA-F]{4})
की आवश्यकता होगी \h
एक नई बात है।
तो यदि आप चाहते हैं कि आपका रेगेक्स 1.8 और 1.9 दोनों में काम करे, तो आपको /\\u([\da-fA-F]{4})/
का उपयोग करना चाहिए।
>> s = 'Where is \u03bc pancakes \u03BD house? And u1123!'
=> "Where is \\u03bc pancakes \\u03BD house? And u1123!"
>> s.gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}
=> "Where is μ pancakes ν house? And u1123!"
यूनिकोड वर्ण में हेक्स संख्या वध करने के लिए pack
और unpack
का प्रयोग शायद काफी अच्छा है, लेकिन वहाँ बेहतर तरीके हो सकते हैं: यह आपको 1.8 और 1.9 में निम्नलिखित देता है।
स्रोत
2011-08-10 20:18:44
ठीक है आप हैं। यह Rails ActiveSupport :: JSON से आ रहा है और ActiveSupport :: JSON द्वारा डीकोड किया जा रहा है, लेकिन यह डीकोडिंग नहीं कर रहा है \ u ठीक से बच निकलता है। (रेल 2.1.2 पर) –