यूनिकोड और ASCII के बीच सटीक अंतर क्या है?
ASCII में कुल 128 वर्ण (विस्तारित सेट में 256) हैं।
क्या यूनिकोड वर्णों के लिए कोई आकार विनिर्देश है?
यूनिकोड और ASCII के बीच सटीक अंतर क्या है?
ASCII में कुल 128 वर्ण (विस्तारित सेट में 256) हैं।
क्या यूनिकोड वर्णों के लिए कोई आकार विनिर्देश है?
जवाबों:
ASCII 128 वर्णों को परिभाषित करता है, जो कि 0-127 की संख्या के मानचित्र पर है। यूनिकोड परिभाषित करता है (कम से कम) 2 21 वर्ण, जो, इसी तरह, नंबरों को 0-2 21 तक मैप करते हैं (हालांकि वर्तमान में सभी नंबर असाइन नहीं किए गए हैं, और कुछ आरक्षित हैं)।
यूनिकोड ASCII का सुपरसेट है, और 0-127 की संख्या का ASCII में वही अर्थ है जैसा कि यूनिकोड में है। उदाहरण के लिए, संख्या 65 का अर्थ है "लैटिन राजधानी 'ए'"।
क्योंकि यूनिकोड वर्ण आम तौर पर एक 8-बिट बाइट में फिट नहीं होते हैं, यूटीएफ -32 और यूटीएफ -8 जैसे बाइट अनुक्रमों में यूनिकोड वर्णों को संग्रहीत करने के कई तरीके हैं।
यह समझना कि एएससीआईआई और यूनिकोड को पहले स्थान पर क्यों बनाया गया था, इससे मुझे दोनों के बीच के अंतर को समझने में मदद मिली।
ASCII, मूल
जैसा कि अन्य उत्तरों में कहा गया है, ASCII एक चरित्र का प्रतिनिधित्व करने के लिए 7 बिट्स का उपयोग करता है। 7 बिट्स का उपयोग करके, हमारे पास अधिकतम 2 ^ 7 (= 128) अलग संयोजन * हो सकते हैं । जिसका अर्थ है कि हम अधिकतम 128 वर्णों का प्रतिनिधित्व कर सकते हैं।
रुको, 7 बिट्स? लेकिन 1 बाइट (8 बिट) क्यों नहीं?
अंतिम बिट (8 वें) का उपयोग त्रुटियों को समता बिट के रूप में बचने के लिए किया जाता है । यह वर्षों पहले प्रासंगिक था।
अधिकांश ASCII वर्ण वर्णमाला के मुद्रण योग्य वर्ण हैं, जैसे abc, ABC, 123; और ?, आदि। अन्य वर्ण वर्ण हैं जैसे कि गाड़ी वापसी, लाइन फीड , टैब, आदि।
ASCII में कुछ पात्रों के द्विआधारी प्रतिनिधित्व के नीचे देखें:
0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)
यहाँ पर पूरी ASCII तालिका देखें ।
ASCII केवल अंग्रेजी के लिए था।
क्या? केवल अंग्रेजी ही क्यों? इतनी सारी भाषाएँ वहाँ!
क्योंकि उस समय कंप्यूटर उद्योग का केंद्र अमरीका में था। परिणामस्वरूप, उन्हें उच्चारण या अन्य चिह्नों जैसे á, ü, ç, ñ, इत्यादि (aka diacritics ) का समर्थन करने की आवश्यकता नहीं थी ।
ASCII विस्तारित
कुछ चतुर लोगों ने अपनी भाषा (फ्रेंच में "é" का समर्थन करने के लिए, उदाहरण के लिए) का समर्थन करने के लिए अधिक वर्णों को एन्कोड करने के लिए 8 बिट (समानता के लिए प्रयुक्त बिट) का उपयोग करना शुरू कर दिया। केवल एक अतिरिक्त बिट का उपयोग करने से मूल ASCII तालिका का आकार दोगुना होकर 256 वर्णों तक पहुंच जाता है (2 ^ 8 = 256 वर्ण)। और 2 ^ 7 पहले (128) के रूप में नहीं।
10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)
इस "ASCII के लिए 8 बिट्स और 7 बिट्स पहले नहीं" के रूप में नाम केवल "विस्तारित ASCII" या "8-बिट ASCII" के रूप में संदर्भित किया जा सकता है।
जैसा कि @Tom ने अपनी टिप्पणी में बताया है कि " विस्तारित ASCII " जैसी कोई चीज नहीं है, फिर भी यह इस 8-बिट चाल को संदर्भित करने का एक आसान तरीका है। 8-बिट ASCII तालिका के कई रूप हैं, उदाहरण के लिए, आईएसओ 8859-1, जिसे आईएसओ लैटिन -1 भी कहा जाता है ।
यूनिकोड, द राइज
ASCII एक्सटेंडेड भाषाओं के लिए समस्या हल करती है जो लैटिन वर्णमाला पर आधारित होती हैं ... दूसरों के बारे में पूरी तरह से अलग वर्णमाला की आवश्यकता क्या है? यूनानी? रूस? चीनी और पसंद?
हमें एक पूरी तरह से नए चरित्र सेट की आवश्यकता होगी ... जो यूनिकोड के पीछे तर्कसंगत है। यूनिकोड में हर भाषा का हर पात्र नहीं होता है, लेकिन यह सुनिश्चित होता है कि इसमें एक विशाल मात्रा में वर्ण हों ( इस तालिका को देखें )।
आप टेक्स्ट को अपनी हार्ड ड्राइव में "यूनिकोड" के रूप में सहेज नहीं सकते हैं। यूनिकोड पाठ का एक सार प्रतिनिधित्व है। आपको इस सार प्रतिनिधित्व को "एनकोड" करने की आवश्यकता है। यही कारण है कि एक एन्कोडिंग खेलने में आता है।
एनकोडिंग: UTF-8 बनाम UTF-16 बनाम UTF-32
मूल बातें समझाने पर यह उत्तर बहुत अच्छा काम करता है:
UTF-8 पहले 128 वर्णों के लिए ASCII सेट का उपयोग करता है। यह आसान है क्योंकि इसका मतलब है कि ASCII पाठ UTF-8 में भी मान्य है।
स्मृति सहायकों:
ध्यान दें:
क्यों 2 ^ 7?
यह कुछ के लिए स्पष्ट है, लेकिन सिर्फ मामले में। हमारे पास 0 या 1 ( बाइनरी कोड ) से भरे सात स्लॉट उपलब्ध हैं । प्रत्येक में दो संयोजन हो सकते हैं। यदि हमारे पास सात स्पॉट हैं, तो हमारे पास 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 ^ 7 = 128 संयोजन हैं। सात पहियों के साथ संयोजन लॉक के रूप में इसके बारे में सोचो, प्रत्येक पहिया में केवल दो नंबर होते हैं।
स्रोत: विकिपीडिया , यह महान ब्लॉग पोस्ट और मोजी जहां मैंने शुरुआत में यह सारांश पोस्ट किया था।
ASCII में 128 कोड अंक हैं, 0 127 के माध्यम से। यह एक एकल 8-बिट बाइट में फिट हो सकता है, जो कि 255 के माध्यम से 128 के मान को अन्य वर्णों के लिए उपयोग किया जा सकता है। असंगत विकल्पों के साथ, कोड पेज आपदा का कारण बनता है। एक कोड पृष्ठ में एन्कोडेड पाठ को किसी ऐसे प्रोग्राम द्वारा सही ढंग से नहीं पढ़ा जा सकता है जो किसी अन्य कोड पेज पर अनुमान या अनुमान लगाता है।
इस आपदा को सुलझाने के लिए यूनिकोड आया। संस्करण 1 की शुरुआत 65536 कोड बिंदुओं के साथ हुई, जो आमतौर पर 16 बिट्स में एन्कोडेड होता है। बाद में संस्करण 2 से 1.1 मिलियन कोड अंकों में बढ़ाया गया। उपलब्ध 1.1 मिलियन कोड बिंदुओं में से 110,187 का उपयोग करके वर्तमान संस्करण 6.3 है। अब 16 बिट्स में फिट नहीं है।
जब v2 आसपास आया तो 16-बिट्स में एन्कोडिंग आम था, उदाहरण के लिए Microsoft और Apple ऑपरेटिंग सिस्टम द्वारा उपयोग किया जाता है। और जावा जैसे भाषा रनटाइम्स। V2 कल्पना उन 1.1 मिलियन कोड बिंदुओं को 16-बिट्स में मैप करने का एक तरीका है। UTF-16 नामक एक एन्कोडिंग, एक चर लंबाई एन्कोडिंग जहां एक कोड बिंदु 2 या 4 बाइट्स ले सकता है। मूल v1 कोड अंक 2 बाइट लेते हैं, जोड़े हुए 4 लेते हैं।
एक अन्य वैरिएबल लंबाई एन्कोडिंग जो बहुत आम है, * nix ऑपरेटिंग सिस्टम और टूल्स में उपयोग किया जाता है, UTF-8 है, एक कोड बिंदु 1 और 4 बाइट्स के बीच ले सकता है, मूल ASCII कोड 1 बाइट लेते हैं बाकी सभी अधिक लेते हैं। केवल गैर-परिवर्तनीय लंबाई एन्कोडिंग UTF-32 है, एक कोड बिंदु के लिए 4 बाइट्स लेता है। अक्सर उपयोग नहीं किया जाता है क्योंकि यह बहुत बेकार है। यूटीएफ -1 और यूटीएफ -7 जैसे अन्य हैं, जिन्हें व्यापक रूप से अनदेखा किया गया है।
UTF-16/32 एन्कोडिंग के साथ एक मुद्दा यह है कि बाइट्स का क्रम टेक्स्ट स्ट्रीम बनाने वाली मशीन के एंडियन-नेस पर निर्भर करेगा। तो मिश्रण UTF-16BE, UTF-16LE, UTF-32BE और UTF-32LE में जोड़ें।
इन विभिन्न एन्कोडिंग विकल्पों के होने से प्रोग्रामर के बीच गर्म बहस के साथ कोड पेज की आपदा कुछ हद तक वापस आ जाती है, जो UTF पसंद "सर्वश्रेष्ठ" है। ऑपरेटिंग सिस्टम के साथ उनका जुड़ाव बहुत हद तक रेखाएँ खींचता है। एक काउंटर-माप एक बीओएम की परिभाषा है, बाइट ऑर्डर मार्क, एक विशेष कोडपॉइंट (U + FEFF, शून्य चौड़ाई स्थान) एक पाठ स्ट्रीम की शुरुआत में इंगित करता है कि बाकी स्ट्रीम कैसे एन्कोडेड है। यह UTF एन्कोडिंग और एंडियनेस दोनों को इंगित करता है और एक टेक्स्ट रेंडरिंग इंजन के लिए तटस्थ है। दुर्भाग्य से यह वैकल्पिक है और कई प्रोग्रामर इसे छोड़ देने के अपने अधिकार का दावा करते हैं ताकि दुर्घटनाएं अभी भी बहुत आम हैं।
जावा यूनिकोड के लिए समर्थन प्रदान करता है अर्थात यह सभी विश्व व्यापी वर्णमालाओं का समर्थन करता है। इसलिए जावा में चार का आकार 2 बाइट्स है। और रेंज 0 से 65535 है।
ASCII में 128 कोड पोजिशन हैं, जो ग्राफिक कैरेक्टर और कंट्रोल कैरेक्टर (कंट्रोल कोड) को आवंटित किए गए हैं।
यूनिकोड में 1,114,112 कोड पोजिशन हैं। उनमें से लगभग 100,000 को वर्तमान में पात्रों को आवंटित किया गया है, और कई कोड पॉइंट्स को स्थायी रूप से नॉनचैकर बनाया गया है (अर्थात किसी भी वर्ण को कभी भी एनकोड करने के लिए उपयोग नहीं किया जाता है), और अधिकांश कोड पॉइंट अभी तक असाइन नहीं किए गए हैं।
केवल वही चीजें जो ASCII और यूनिकोड में समान हैं: 1) वे चरित्र कोड हैं। 2) यूनिकोड के 128 पहले कोड पदों को ASCII के समान अर्थों के रूप में परिभाषित किया गया है, सिवाय इसके कि ASCII नियंत्रण वर्णों के कोड पदों को उनके ASCII नामों के अनुरूप नामों के साथ नियंत्रण वर्णों को निरूपित करने के रूप में परिभाषित किया जाता है, लेकिन उनके अर्थ हैं यूनिकोड में परिभाषित नहीं।
कभी-कभी, हालांकि, यूनिकोड की विशेषता होती है (यूनिकोड मानक में भी!) "विस्तृत ASCII" के रूप में। यह एक नारा है जो मुख्य रूप से इस विचार को व्यक्त करने की कोशिश करता है कि यूनिकोड एक सार्वभौमिक चरित्र कोड है, जिस तरह एक बार ASCII था (हालांकि ASCII का चरित्र प्रदर्शनों का समूह सार्वभौमिक उपयोग के लिए निराशाजनक था), विभिन्न कोड का उपयोग करने के विपरीत। विभिन्न प्रणालियों और अनुप्रयोगों और विभिन्न भाषाओं के लिए।
यूनिकोड जैसे वर्णों के केवल "तार्किक आकार" को परिभाषित करता है: प्रत्येक वर्ण की एक विशिष्ट सीमा में एक कोड संख्या होती है। इन कोड नंबरों को अलग-अलग ट्रांसफर एन्कोडिंग्स का उपयोग करके प्रस्तुत किया जा सकता है, और आंतरिक रूप से, मेमोरी में, यूनिकोड वर्णों को आमतौर पर प्रति वर्ण एक या दो 16-बिट मात्रा का उपयोग करके दिखाया जाता है, वर्ण सीमा के आधार पर, कभी-कभी प्रति वर्ण एक 32-बिट मात्रा का उपयोग करके।
ASCII और यूनिकोड दो चरित्र एनकोडिंग हैं। मूल रूप से, वे बाइनरी में अंतर वर्णों का प्रतिनिधित्व करने के तरीके पर मानक हैं ताकि उन्हें डिजिटल मीडिया में लिखा, संग्रहीत, प्रेषित और पढ़ा जा सके। दोनों के बीच मुख्य अंतर इस तरह से है कि वे चरित्र और बिट्स की संख्या को सांकेतिक शब्दों में बदलना करते हैं जो वे प्रत्येक के लिए उपयोग करते हैं। ASCII ने मूल रूप से प्रत्येक वर्ण को एनकोड करने के लिए सात बिट्स का उपयोग किया था। बाद में मूल की स्पष्टता को स्पष्ट करने के लिए विस्तारित ASCII के साथ इसे बढ़ाकर आठ कर दिया गया। इसके विपरीत, यूनिकोड एक चर बिट एन्कोडिंग प्रोग्राम का उपयोग करता है जहां आप 32, 16 और 8-बिट एनकोडिंग के बीच चयन कर सकते हैं। अधिक बिट्स का उपयोग करने से आप बड़ी फ़ाइलों की कीमत पर अधिक वर्णों का उपयोग कर सकते हैं, जबकि कम बिट्स आपको सीमित विकल्प देती हैं, लेकिन आप बहुत अधिक स्थान बचाते हैं। कम बिट (यानी
यूनिकोड समस्या के कई गैर-मानक विस्तारित ASCII कार्यक्रमों में से एक मुख्य कारण था। जब तक आप प्रचलित पृष्ठ का उपयोग नहीं कर रहे हैं, जिसका उपयोग Microsoft और अधिकांश अन्य सॉफ़्टवेयर कंपनियों द्वारा किया जाता है, तब आपको अपने पात्रों को बॉक्स के रूप में प्रदर्शित होने की समस्या होने की संभावना है। यूनिकोड वस्तुतः इस समस्या को समाप्त करता है क्योंकि सभी वर्ण कोड अंक मानकीकृत थे।
यूनिकोड का एक अन्य प्रमुख लाभ यह है कि इसकी अधिकतम संख्या पर वर्णों की एक बड़ी संख्या को समायोजित किया जा सकता है। इस वजह से, यूनिकोड में वर्तमान में अधिकांश लिखित भाषाएं हैं और अभी भी इसके लिए जगह है। इसमें अंग्रेजी की तरह सामान्य बाएं से दाएं स्क्रिप्ट और यहां तक कि अरबी की तरह दाएं से बाएं स्क्रिप्ट शामिल हैं। चीनी, जापानी और कई अन्य वेरिएंट भी यूनिकोड के भीतर दर्शाए गए हैं। इसलिए जल्द ही यूनिकोड को प्रतिस्थापित नहीं किया जाएगा।
पुराने ASCII के साथ संगतता बनाए रखने के लिए, जो उस समय पहले से ही व्यापक उपयोग में था, यूनिकोड को इस तरह से डिजाइन किया गया था कि पहले आठ बिट्स सबसे लोकप्रिय ASCII पृष्ठ से मेल खाते थे। इसलिए यदि आप यूनिकोड के साथ एक ASCII एन्कोडेड फ़ाइल खोलते हैं, तो आपको अभी भी फ़ाइल में एन्कोडेड सही अक्षर मिलते हैं। इसने यूनिकोड को अपनाने की सुविधा प्रदान की क्योंकि इससे उन लोगों के लिए एक नया एन्कोडिंग मानक अपनाने का प्रभाव कम हो गया जो पहले से ही ASCII का उपयोग कर रहे थे।
सारांश:
1.ASCII uses an 8-bit encoding while Unicode uses a variable bit encoding.
2.Unicode is standardized while ASCII isn’t.
3.Unicode represents most written languages in the world while ASCII does not.
4.ASCII has its equivalent within Unicode.
से लिया गया: http://www.differencebetween.net/technology/software-technology/difference-between-unicode-and-ascii/#ixzz4zEjnxPhs
दिए गए नंबर केवल 1 वर्ण को संग्रहीत करने के लिए हैं
ASCII 128 वर्णों को परिभाषित करता है, क्योंकि यूनिकोड में 120,000 से अधिक वर्णों का एक संग्रह है।
परे कैसे UTF ASCII का सुपरसेट है, ASCII और UTF के बीच जानने के लिए एक और अच्छा अंतर है डिस्क फ़ाइल एन्कोडिंग और यादृच्छिक मेमोरी में डेटा प्रतिनिधित्व और भंडारण के संदर्भ में। कार्यक्रम जानते हैं कि दिए गए डेटा को ASCII या UTF स्ट्रिंग के रूप में समझा जाना चाहिए या तो डेटा की शुरुआत में विशेष बाइट ऑर्डर मार्क कोड का पता लगाकर, या प्रोग्रामर इरादे से यह मानकर कि डेटा पाठ है और फिर इसे इंगित करने वाले पैटर्न की जाँच करें। एक पाठ एन्कोडिंग या किसी अन्य में।
के पारंपरिक उपसर्ग अंकन का उपयोग 0x
हेक्साडेसिमल डेटा के लिए, बुनियादी अच्छा संदर्भ बाइट मूल्यों के साथ कि ASCII पाठ शुरू होता है 0x00
करने के लिए 0x7F
में से एक का प्रतिनिधित्व करने के लिए संभव ASCII वर्ण मान । UTF पाठ को सामान्यतः 0xEF 0xBB 0xBF
UTF8 के लिए बाइट्स के साथ शुरू करके दर्शाया जाता है । UTF16 के लिए, बाइट्स शुरू करें 0xFE 0xFF
, या शुरू बाइट्स के 0xFF 0xFE
आदेश से संकेतित टेक्स्ट बाइट्स के एंडियन-नेस ऑर्डर के साथ उपयोग किया जाता है। बाइट मूल्यों की सरल उपस्थिति जो संभव बाइट मूल्यों के एएससीआईआई श्रेणी में नहीं है, यह भी इंगित करता है कि डेटा संभवतः यूटीएफ है।
अन्य बाइट ऑर्डर के निशान हैं जो डेटा को इंगित करने के लिए विभिन्न कोड का उपयोग करते हैं, इसे एक निश्चित एन्कोडिंग मानक में एन्कोडेड पाठ के रूप में व्याख्या की जानी चाहिए।