वास्तविक दुनिया में ASCII
संख्याओं को स्ट्रिंग्स में मैप करने की यह पूरी चीज़ पर्दे के पीछे आपके लिए होती है।
लेकिन कुछ व्यावहारिक उपयोग हैं!
उदाहरण के लिए:
HTTP स्पेसिफिकेशन URLs के अंदर कुछ कैरेक्टर्स की अनुमति नहीं देता।
लेकिन आप इन अमान्य कैरेक्टर्स को ASCII फॉर्मेट में एन्कोड कर सकते हैं और अधिकांश आधुनिक वेब सर्वर उन्हें सही ढंग से व्याख्या करेंगे।
example.com/a+++ => example.com/a%2B%2B%2B
%2B क्या है?
यह ASCII-एन्कोडेड फॉर्मेट में कैरेक्टर + है।
आप इस ज्ञान का उपयोग कैरेक्टर्स को ट्रांसफॉर्म करने के लिए भी कर सकते हैं।
उदाहरण के लिए:
यदि आप ASCII टेबल को देखते हैं, तो आप देखेंगे कि आप एक लोअरकेस कैरेक्टर को अपरकेस में बदल सकते हैं उससे 32 घटाकर।
("a".ord - 32).chr # "A"
यह दूसरी तरफ भी काम करता है।
("A".ord + 32).chr # "a"
हाँ।
Ruby में, हमारे पास upcase और downcase मेथड्स हैं।
लेकिन यह किसी प्रकार के इंटरव्यू प्रश्न, कोडिंग चैलेंज, या इसी तरह की स्थिति में आपके लिए मददगार हो सकता है।
Unicode क्या है?
ASCII केवल 127 अलग-अलग कैरेक्टर्स (एक्सटेंडेड ASCII के साथ 256) एन्कोड कर सकता है, यह सीमित करता है कि हम कौन से कैरेक्टर्स प्रतिनिधित्व कर सकते हैं।
समाधान?
Unicode।
Unicode एक स्ट्रिंग एन्कोडिंग सिस्टम है जो दस लाख अलग-अलग कैरेक्टर्स तक प्रतिनिधित्व कर सकता है।
यह ASCII से बहुत अधिक स्थान है!
अब हम सभी प्रकार की भाषाओं, नए सिम्बल्स और यहां तक कि इमोजी से कैरेक्टर्स शामिल कर सकते हैं।
यहाँ कुछ Unicode है:
ɑΩϕβΣπ
ये ग्रीक अल्फाबेट के कैरेक्टर्स हैं जिन्हें ASCII का उपयोग करके प्रदर्शित नहीं किया जा सकता।
Ruby में Unicode का उपयोग कैसे करें
Ruby में Unicode के लिए सपोर्ट है, यह Ruby 1.9 से डिफ़ॉल्ट रूप से सक्षम है।
तो आप ऐसा कर सकते हैं:
π = 3.141592
या यह:
def ★★★ puts "आपको 3 स्टार मिले, बहुत बढ़िया काम!" end ★★★ # "आपको 3 स्टार मिले, बहुत बढ़िया काम!"
बहुत मजेदार!
लेकिन शायद इन सिम्बल्स का उपयोग करके मेथड्स और वेरिएबल्स को परिभाषित करना इतना व्यावहारिक नहीं है क्योंकि वे हमारे कीबोर्ड में नहीं हैं।
वास्तव में, वैध, अदृश्य Unicode कैरेक्टर्स हैं।
उदाहरण:
def puts "अदृश्य मेथड" end
यह एक नाम के बिना मेथड की तरह दिखता है, जो सामान्य रूप से अनुमत नहीं है।
लेकिन यह उस अदृश्य Unicode कैरेक्टर के कारण काम करता है!
स्ट्रिंग एन्कोडिंग मेथड्स
Ruby में विभिन्न एन्कोडिंग सिस्टम्स के साथ काम करने के लिए मेथड्स हैं।
उदाहरण के लिए:
"abc".encoding.name # "UTF-8"
कुछ विशेष परिदृश्य हैं जहां वर्तमान एन्कोडिंग (encoding.name) स्ट्रिंग के वास्तविक एन्कोडिंग से मेल नहीं खाता।
आप इसे वेबसाइट, फाइल, डेटाबेस या किसी अन्य बाहरी स्रोत से डेटा पढ़ते समय पा सकते हैं।
इसके परिणामस्वरूप एक InvalidByteSequenceError होगा।
यदि ऐसा होता है तो आपको एन्कोडिंग बदलने की आवश्यकता होगी।
कैसे?
encode मेथड का उपयोग करके:
"abcΣΣΣ".encode("ASCII", "UTF-8", undef: :replace) # "abc???"
मैं UTF-8 (Unicode) से ASCII में कन्वर्ट कर रहा हूँ, और क्योंकि Σ कैरेक्टर ASCII में उपलब्ध नहीं है, हम Ruby को इसे बदलने के लिए कहते हैं।
डिफ़ॉल्ट रूप से, यह अपरिभाषित कैरेक्टर्स को क्वेश्चन मार्क्स से बदल देता है।
लेकिन आप इसे बदल सकते हैं।
इस तरह:
"abcΣΣΣ".encode("ASCII", "UTF-8", invalid: :replace, undef: :replace, replace: "") # "abc"
या "फॉलबैक" विकल्प का उपयोग करके:
"abcΣΣΣ".encode("ASCII", "UTF-8", fallback: {"Σ" => "E"}) # "abcEEE"
यह कह रहा है:
"UTF-8 (Unicode) से ASCII में सभी कैरेक्टर्स बदलें, उन कैरेक्टर्स का अनुवाद करने के लिए फॉलबैक हैश का उपयोग करें जो ASCII में मौजूद नहीं हैं"।
एक और मेथड, force_encoding, इस अनुवाद चरण के बिना एन्कोडिंग बदलता है।
उदाहरण:
"abc½½½".force_encoding("iso-8859-1")
आप Encoding.aliases मेथड के साथ उपलब्ध एन्कोडिंग्स की सूची प्राप्त कर सकते हैं।
सारांश
आपने सीखा कि कंप्यूटर एन्कोडिंग टेबल्स का उपयोग करके संख्याओं से कैरेक्टर्स कैसे बनाते हैं! आपने Ruby में ASCII और Unicode के बारे में भी सीखा।
अब अपना एडिटर खोलें और अभ्यास करने में कुछ मज़ा लें 😃
पढ़ने के लिए धन्यवाद।