क्या ASCII कोड 7-बिट या 8-बिट है?


100

मेरे शिक्षक ने मुझे बताया कि ASCII 8-बिट कैरेक्टर कोडिंग स्कीम है। लेकिन इसे केवल 0-127 कोड के लिए परिभाषित किया गया है जिसका अर्थ है कि इसे 7-बिट में फिट किया जा सकता है। तो क्या यह तर्क नहीं दिया जा सकता है कि ASCII बिट वास्तव में 7-बिट कोड है?

और जब ASCII 8-बिट कोड है, तो हम कहने का क्या मतलब है?

जवाबों:


91

ASCII वास्तव में मूल रूप से 7-बिट कोड के रूप में कल्पना की गई थी। 8-बिट बाइट्स सर्वव्यापी बनने से पहले यह अच्छी तरह से किया गया था, और यहां तक ​​कि 1990 के दशक में आप सॉफ्टवेयर पा सकते थे जो यह मानते थे कि यह प्रत्येक बाइट के 8 वें बिट को अपने उद्देश्यों के लिए उपयोग कर सकता है ("8-बिट क्लीन नहीं")। आजकल लोग इसे 8-बिट कोडिंग के रूप में सोचते हैं जिसमें 0xFF के माध्यम से 0x80 बाइट्स का कोई परिभाषित अर्थ नहीं है, लेकिन यह एक पूर्वव्यापी है

दर्जनों पाठ एन्कोडिंग हैं जो 8 बिट का उपयोग करते हैं; उन्हें ASCII- संगत या नहीं के रूप में वर्गीकृत किया जा सकता है, और निश्चित- या चर-चौड़ाई। ASCII- संगत का अर्थ है कि संदर्भ की परवाह किए बिना , 0x7F के माध्यम से 0x00 से मान के साथ एकल बाइट्स उन्हीं वर्णों को कूटबद्ध करते हैं जो वे ASCII में होंगे। यदि आप संभवतः इसे टाल सकते हैं, तो आपको गैर-एएससीआईआई-संगत पाठ एन्कोडिंग के साथ कुछ भी नहीं करना है; ASCII से अपेक्षा करने वाले भोले कार्यक्रम भयावह रूप से, अक्सर सुरक्षा-तोड़ने वाले फैशन में उनकी गलत व्याख्या करते हैं। वे आजकल इतने अधिक पदावनत हैं कि (उदाहरण के लिए) HTML5 ने सार्वजनिक वेब पर यूटीएफ -16 के दुर्भाग्यपूर्ण अपवाद के साथ उनका उपयोग करने से मना कर दिया है । मैं उनके बारे में और बात नहीं करने जा रहा हूं।

एक निश्चित-चौड़ाई वाली एन्कोडिंग का अर्थ है कि यह कैसा लगता है: सभी वर्ण एक ही संख्या के बाइट्स का उपयोग करके एन्कोड किए गए हैं। एएससीआईआई-संगत होने के लिए, एक निश्चित-एन्कोडिंग को केवल एक बाइट का उपयोग करके अपने सभी पात्रों को एन्कोड करना होगा, इसलिए इसमें 256 से अधिक वर्ण नहीं हो सकते। आजकल इस तरह के सबसे आम एन्कोडिंग विंडोज -1252 , आईएसओ 8859-1 का विस्तार है ।

आजकल के बारे में जानने लायक केवल एक चर-चौड़ाई ASCII- संगत एन्कोडिंग है, लेकिन यह बहुत महत्वपूर्ण है: UTF-8 , जो यूनिकोड के सभी को ASCII- संगत एन्कोडिंग में पैक करता है। आप वास्तव में इसका उपयोग करना चाहते हैं यदि आप इसे प्रबंधित कर सकते हैं।

अंतिम नोट के रूप में, "ASCII" आजकल यूनिकोड से अपनी व्यावहारिक परिभाषा लेता है , न कि अपने मूल मानक (ANSI X3.4-1968) से, क्योंकि ऐतिहासिक रूप से ASCII 127-वर्ण प्रदर्शनों की सूची में कई दर्जन विविधताएं थीं - उदाहरण के लिए, कुछ फ्रेंच पाठ के प्रसारण को सुविधाजनक बनाने के लिए विराम चिह्नों को अक्षरों से बदला जा सकता है। आजकल वे सभी विविधताएं अप्रचलित हैं, और जब लोग "ASCII" कहते हैं, तो उनका मतलब है कि 0x7F के माध्यम से मूल्य 0x00 के साथ बाइट्स ने यूनिकोड कोड पॉइंट्स यू + 0000 को यू + 007 एफ के माध्यम से एनकोड किया है। यह शायद आपके लिए केवल तभी मायने रखेगा जब आप खुद को तकनीकी मानक लिखते हुए पाएंगे।

यदि आप ASCII के इतिहास में रुचि रखते हैं और इससे पहले हुए एन्कोडिंग, "द कैरेक्टर्स ऑफ कैरेक्टर कोड, 1874-1968" से शुरू करते हैं ( http://falsedoor.com/doc/asci_evolution-of- पर samizdat copy character-codes.pdf ) और फिर इसके संदर्भों का पीछा करें (जिनमें से कई ऑनलाइन उपलब्ध नहीं हैं और विश्वविद्यालय के पुस्तकालय तक पहुंच के साथ भी इसे खोजना मुश्किल हो सकता है, मुझे खेद है)।


1
तो एएससीआईआई 7-बिट या 8-बिट है? आप कहते हैं कि यह 0x00-0x7F का उपयोग करता है, जाहिर है। लेकिन क्या हम अग्रणी 0 की गिनती करते हैं?
अनुराग कालिया

8
यह इस बात पर निर्भर करता है कि आप किस तरह के शिशु हैं। वह विनिर्देश जो अभी भी आधिकारिक तौर पर ASCII (ANSI X3.4-1968) को परिभाषित करता है, इसे 7-बिट एन्कोडिंग के रूप में वर्णित करता है, लेकिन कोई भी अब 7-बिट बाइट्स को प्रसारित नहीं करता है, और आजकल अंतर यह बताता है कि आठवां बिट शून्य होना चाहिए - आप नहीं कर सकते समता बिट या समान के लिए इसका उपयोग करें। इसलिए यह समान रूप से मान्य ASNSII ASCII को एक आठ-बिट एन्कोडिंग के रूप में वर्णित करने के लिए है जो कि इसके संख्या स्थान के ऊपरी आधे हिस्से को "आरक्षित, उपयोग न करें" के रूप में छोड़ने के लिए होता है। किसी भी तरह से, यदि आप आठ-बिट बाइट्स प्रसारित करते हैं, जिनमें से कोई भी उनका उच्च बिट सेट है, तो आप मान्य ASCII को प्रेषित नहीं कर रहे हैं ।
zwol

1
(... लेकिन आप UTF-8 या ISO 8859-1 या
KO8

1
वास्तव में पांडित्यपूर्ण होने के लिए, मानक अब INCITS 4-1986 [R2012] है, क्योंकि ASC को पहले X3 के रूप में जाना जाता था, जो तब NCITS में परिवर्तित हो गया था। लेकिन फ्रेंच, जर्मन, स्पेनिश, आदि के लिए लगभग एक दर्जन उच्चारण पत्रों के साथ 7-बिट वेरिएंट ANSI / INCITS नहीं हैं, बल्कि ISO / IEC 646 और ECMA-6 हैं। और यह 8-बिट (आईएसओ / आईईसी) 8859-1 है जो यूनिकोड के पहले 256-चार ब्लॉक बनाता है।
dave_thompson_085

2
@ dave_thompson_085 हर कोई आपके जैसा पांडित्यपूर्ण नहीं है - जिसका अर्थ है कि आप पुराने तकनीकी दस्तावेज पा सकते हैं, और यहां तक ​​कि मानक, "ASCII", या यहां तक ​​कि "X3.4-1968", राष्ट्रीय अनुदान को शामिल करने का इरादा रखते हैं , या कम से कम यह स्पष्ट रूप से सत्तारूढ़ नहीं है, तर्कों के लिए अग्रणी। इसलिए, मैं व्यक्तिगत रूप से यूनिकोड का उपयोग ASCII के लिए संदर्भात्मक संदर्भ के रूप में करूंगा, अगर मुझे कोई युक्ति लिखनी है जहां यह मामला था। मेरा बस यही मतलब है।
zwol 21

14

लिनक्स पर man asciiकहते हैं:

ASCII सूचना इंटरचेंज के लिए अमेरिकी मानक कोड है। यह 7-बिट कोड है।


9

मूल ASCII तालिका 7 बिट्स पर एन्कोडेड है, इसलिए इसमें 128 वर्ण हैं।

आजकल अधिकांश पाठकों / संपादक (से एक "विस्तारित" ASCII तालिका का उपयोग आईएसओ 8859-1 , जिस पर एन्कोड किया गया है) 8 बिट और (सहित 256 वर्णों आनंद मिलता है Á , Ä , , é , नौकरी और साथ ही यूरोपीय भाषाओं के लिए उपयोगी अन्य पात्रों गणितीय ग्लिफ़ और अन्य प्रतीकों के रूप में)।

जबकि UTF-8 का उपयोग करता है बुनियादी ASCII तालिका के रूप में समान कूट (अर्थ 0x41है एक दोनों कोड में), यह "लैटिन विस्तारित-ए 'ब्लॉक के लिए समान कूट का हिस्सा नहीं है। जो कभी-कभी अ ला कार्टे या पीनता जैसे शब्दों में अजीब चरित्र का कारण बनता है ।


उपरोक्त में कई गलती हैं। Œ ISO 8859-1 का हिस्सा नहीं है, हालांकि यह CP-1252 में है । और लैटिन विस्तारित-ए ब्लॉक यूनिकोड का पहला 128 या 256 अक्षर नहीं है: यह अगला ब्लॉक है, क्योंकि इनमें ğ, ł और ſ जैसे अक्षर हैं।
रिचर्ड स्मिथ

अच्छी बात! मुझे लगता है कि मेरा मतलब "लैटिन -1 पूरक" था। मानक मानकों ...
गुइल्यूम

1
कई "विस्तारित एएससीआईआई" चरित्र सेट हैं और उनमें से केवल एक आईएसओ 8859-1 है। यह शब्द लगभग अर्थहीन है क्योंकि जब आप एन्कोडिंग और डिकोडिंग टेक्स्ट होते हैं, तो आपको यह जानना होगा कि किस विशिष्ट वर्ण एन्कोडिंग का उपयोग किया जा रहा है (और यह एक विस्तारित ASCII वर्ण सेट के लिए भी नहीं हो सकता है)।
टॉम ब्लोडेट

2

ASCII एन्कोडिंग 7-बिट है, लेकिन व्यवहार में, ASCII में एन्कोड किए गए वर्ण 7 बिट्स के समूहों में संग्रहीत नहीं हैं। इसके बजाय, एक ASCII एक बाइट में संग्रहीत होता है, MSB के साथ आमतौर पर 0 पर सेट होता है (हाँ, यह ASCII में बर्बाद हो गया है)।

आप पाठ संपादक में सेट ASCII चरित्र में एक स्ट्रिंग इनपुट करके, ASCII को एन्कोडिंग सेट करके और बाइनरी / हेक्स को देखकर इसे सत्यापित कर सकते हैं:
यहां छवि विवरण दर्ज करें

एक तरफ: (सख्ती से) ASCII एन्कोडिंग का उपयोग अब असामान्य है, UTF-8 के पक्ष में (जो ऊपर उल्लिखित MSB को बर्बाद नहीं करता है - वास्तव में, 1 का एक MSB इंगित करता है कि कोड बिंदु 1 बाइट से अधिक के साथ एन्कोड किया गया है)।


0

मूल ASCII कोड ने 128 अलग-अलग वर्ण प्रदान किए हैं, जिनकी संख्या 0 से 127 तक है। ASCII एक 7-बिट पर्यायवाची है, क्योंकि 8-बिट बाइट आम संग्रहण तत्व है, ASCII 128 अतिरिक्त वर्णों के लिए जगह छोड़ता है जो विदेशी भाषाओं और अन्य प्रतीकों के लिए उपयोग किए जाते हैं। लेकिन 7-बिट कोड मूल 8-बिट कोड से पहले बनाया गया था। ASCII सूचना इंटरचेंज के लिए अमेरिकन स्टैंडर्ड कोड के लिए खड़ा है। शुरुआती इंटरनेट मेल सिस्टम में, यह केवल 7-बिट ASCII कोड का समर्थन करता था, ऐसा इसलिए था क्योंकि यह चूसना सिस्टम पर प्रोग्राम और मल्टीमीडिया फ़ाइलों को निष्पादित कर सकता था। ये सिस्टम बाइट के 8 बिट्स का उपयोग करते हैं लेकिन फिर इसे MIME, UUcoding और BinHex जैसी कोडिंग विधियों का उपयोग करके 7-बिट प्रारूप में बदल दिया जाना चाहिए। इसका मतलब है कि 8-बिट को 7-बिट वर्णों में बदल दिया गया है, जो उन्हें एनकोड करने के लिए अतिरिक्त बाइट्स जोड़ता है।


-3

जब हम ASCII को 7 बिट कोड के रूप में कहते हैं, तो बाएं बिट को साइन बिट के रूप में उपयोग किया जाता है ताकि हम 7 बिट्स को 127 तक लिख सकें। इसका मतलब है कि -126 से 127 क्योंकि ASCII का अधिकतम इमाम मूल्य 0 से 255 है। यह हो सकता है केवल 7 बिट के तर्क से संतुष्ट यदि अंतिम बिट को साइन बिट माना जाता है


एक चरित्र का संकेत कैसे हो सकता है?
ओलेह मीसरोश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.