Ascii85
ए. एस. सी. आई. 85, जिसे बेस 85 भी कहा जाता है, बी. टी. ओ. ए. उपयोगिता के लिए पॉल ई. रटर द्वारा विकसित द्विआधारी-से-पाठ कूटलेखन का एक रूप है। बाइनरी डेटा के चार बाइट्स का प्रतिनिधित्व करने के लिए पांच ए. एस. सी. आई. आई. वर्णों का उपयोग करके (एन्कोडेड आकार को मूल से बड़ा बनाते हुए, प्रति ए. एस. सी. आई. आई. वर्ण आठ बिट मानते हुए), यह यूएनकोड या बेस64 की तुलना में अधिक कुशल है, जो तीन बाइट्स का प्रतिनिधित्व करने के लिए चार वर्णों का उपयोग करता है। इसका मुख्य आधुनिक उपयोग एडोब के पोस्टस्क्रिप्ट और पोर्टेबल दस्तावेज़ प्रारूप फ़ाइल प्रारूपों के साथ-साथ गिट द्वारा उपयोग की जाने वाली द्विआधारी फ़ाइलों के लिए पैच एन्कोडिंग में किया जाता है। बाइनरी-टू-टेक्स्ट एन्कोडिंग की बुनियादी आवश्यकता पहले से मौजूद संचार प्रोटोकॉल पर मनमाने द्विआधारी डेटा को संप्रेषित करने की आवश्यकता से आती है जिसे केवल अंग्रेजी भाषा के मानव-पठनीय पाठ को ले जाने के लिए डिज़ाइन किया गया था। वे संचार प्रोटोकॉल केवल 7-बिट सुरक्षित हो सकते हैं (और इसके भीतर कुछ एएससीआईआई नियंत्रण कोड से बचें), और कुछ अधिकतम अंतराल पर लाइन ब्रेक की आवश्यकता हो सकती है, और व्हाइटस्पेस बनाए नहीं रख सकते हैं। इस प्रकार, केवल 94 छापने योग्य ए. एस. सी. आई. आई. वर्ण डेटा देने के लिए उपयोग करने के लिए "सुरक्षित" हैं। 85 एन का न्यूनतम समाकलन मान है; इसलिए 4 बाइट्स के किसी भी अनुक्रम को 5 प्रतीकों के रूप में कूटबद्ध किया जा सकता है, जब तक कि कम से कम 85 अलग-अलग प्रतीक उपलब्ध हों। (पाँच मूलांक-85 अंक 0 से 4,437,053 124 तक के पूर्णांकों का प्रतिनिधित्व कर सकते हैं, जो सभी 4,294,967,296 संभावित 4-बाइट्स अनुक्रमों का प्रतिनिधित्व करने के लिए पर्याप्त है।) एन्कोडिंग करते समय, 4 बाइट्स के प्रत्येक समूह को 32-बिट द्विआधारी संख्या के रूप में लिया जाता है, सबसे महत्वपूर्ण बाइट्स पहले (ASCII85 एक बिग-एंडियन परंपरा का उपयोग करता है)। इसे बार-बार 85 से विभाजित करके और शेष को 5 मूलांक-85 अंकों में बदल दिया जाता है। फिर प्रत्येक अंक (फिर से, सबसे महत्वपूर्ण पहले) को 33 जोड़कर ए. एस. सी. आई. आई. छापने योग्य वर्ण के रूप में कूटबद्ध किया जाता है, जिससे ए. एस. सी. आई. आई. वर्ण 33 (! 117 (यू) के माध्यम से। क्योंकि सभी शून्य डेटा काफी आम है, डेटा संपीड़न के लिए एक अपवाद बनाया गया है, और एक सभी शून्य समूह को इसके बजाय एक एकल वर्ण z के रूप में कूटबद्ध किया गया है! !!!!!! वर्णों के समूह जो इससे अधिक मूल्य पर डिकोड करते हैं (s8W-के रूप में कूटबद्ध!) एक डिकोडिंग त्रुटि का कारण बनेगा, जैसा कि एक समूह के बीच में z वर्ण होंगे। वर्णों के बीच सफेद स्थान को नजरअंदाज कर दिया जाता है और रेखा-लंबाई की सीमाओं को समायोजित करने के लिए कहीं भी हो सकता है। सीमाएँ मूल विनिर्देश केवल एक धारा को एन्कोड करने की अनुमति देता है जो 4 बाइट्स का गुणक है। एन्कोडेड डेटा में ऐसे वर्ण हो सकते हैं जिनका कई प्रोग्रामिंग भाषाओं में और कुछ पाठ-आधारित प्रोटोकॉल में विशेष अर्थ होता है, जैसे कि लेफ्ट-एंगल-ब्रैकेट <, बैकस्लैश\, और एकल और दोहरे उद्धरण 'और'। अन्य बेस-85 एन्कोडिंग जैसे Z85 और स्रोत कोड में सुरक्षित होने के लिए डिज़ाइन किए गए हैं। इतिहास बी. टी. ओ. ए. संस्करण मूल बी. टी. ओ. ए. कार्यक्रम हमेशा "एक्स. बी. टी. ओ. ए. बिगिन" की उपसर्ग पंक्ति और "एक्स. बी. टी. ओ. ए. एंड" की प्रत्यय पंक्ति के साथ पूर्ण समूहों (आवश्यकतानुसार स्रोत को पैडिंग) को कूटबद्ध करता है, जिसके बाद मूल फ़ाइल की लंबाई (दशमलव और हेक्साडेसिमल में) और तीन 32-बिट चेकसम होते हैं। डिकोडर को यह देखने के लिए फ़ाइल की लंबाई का उपयोग करने की आवश्यकता है कि समूह का कितना हिस्सा पैडिंग कर रहा था। बी. टी. ओ. ए. एन्कोडिंग के लिए प्रारंभिक प्रस्ताव में "टी" समावेशी के माध्यम से ए. एस. सी. आई. आई. अंतरिक्ष वर्ण से शुरू होने वाली एक एन्कोडिंग वर्णमाला का उपयोग किया गया था, लेकिन इसे "! "यू" से बचने के लिए "कुछ मेल करने वालों के साथ समस्याएं (पीछे के रिक्त स्थान को हटाना)"। इस कार्यक्रम ने एक पूर्ण-शून्य समूह के लिए विशेष "जेड" संक्षिप्त रूप भी पेश किया। संस्करण 4.2 में सभी ए. एस. सी. आई. आई. स्थान वर्णों (0x202020) के समूह के लिए एक "वाई" अपवाद जोड़ा गया है। ZMODEM संस्करण "ZMODEM पैक-7 एन्कोडिंग" 4 ऑक्टेट के समूहों को 5 छापने योग्य ASCII वर्णों के समूहों में एन्कोड करता है, या संभवतः उसी तरह जैसे ASCII85 करता है। जब एक ZMODEM प्रोग्राम 7-बिट डेटा चैनलों पर पूर्व-संपीड़ित 8-बिट डेटा फाइलें भेजता है, तो यह "ZMODEM पैक-7 एन्कोडिंग" का उपयोग करता है। एडोब संस्करण एडोब ने बुनियादी बी. टी. ओ. ए. एन्कोडिंग को अपनाया, लेकिन थोड़े बदलावों के साथ, और इसे ए. एस. सी. आई. 85 नाम दिया। उपयोग किए गए वर्ण एएससीआईआई वर्ण 33 (!) हैं। 117 के माध्यम से (यू) समावेशी (आधार-85 अंकों को 0 से 84 का प्रतिनिधित्व करने के लिए), अक्षर z के साथ (32-बिट 0 मान का प्रतिनिधित्व करने के लिए एक विशेष मामले के रूप में), और सफेद स्थान को नजरअंदाज कर दिया जाता है। एडोब एएससीआई85-एन्कोडेड स्ट्रिंग के अंत को चिह्नित करने के लिए परिसीमन "~>" का उपयोग करता है और अंतिम समूह को काटकर लंबाई का प्रतिनिधित्व करता हैः यदि स्रोत बाइट्स के अंतिम ब्लॉक में 4 से कम बाइट्स होते हैं, तो एन्कोडिंग से पहले ब्लॉक को 3 नल बाइट्स के साथ पैडेड किया जाता है। एन्कोडिंग के बाद, पैडिंग के रूप में जितने बाइट्स जोड़े गए थे, उन्हें आउटपुट के अंत से हटा दिया जाता है। डिकोडिंग करते समय उल्टा लागू किया जाता हैः अंतिम ब्लॉक को ASCII85 वर्ण u के साथ 5 बाइट्स पर पैडेड किया जाता है, और पैडिंग के रूप में जितने बाइट्स जोड़े गए थे, उन्हें आउटपुट के अंत से हटा दिया जाता है (उदाहरण देखें)। पैडिंग मनमाना नहीं है। द्विआधारी से आधार 64 में परिवर्तित करना केवल बिट्स को पुनः समूहित करता है और उन्हें या उनके क्रम को नहीं बदलता है (द्विआधारी में एक उच्च बिट आधार 64 प्रतिनिधित्व में निम्न बिट्स को प्रभावित नहीं करता है)। द्विआधारी संख्या को आधार 85 में परिवर्तित करने में (85 दो की शक्ति नहीं है) उच्च बिट निम्न क्रम आधार 85 अंकों को प्रभावित करते हैं और इसके विपरीत। डिकोडिंग में बेस 85 मान उच्च (हमारे साथ) को एन्कोडिंग और पैडिंग करते समय द्विआधारी निम्न (शून्य बिट्स के साथ) को पैडिंग करना यह आश्वासन देता है कि उच्च क्रम के बिट्स संरक्षित हैं (द्विआधारी में शून्य पैडिंग पर्याप्त जगह देती है ताकि एक छोटा सा जोड़ फंस जाए और उच्च बिट्स के लिए कोई "कैरी" न हो)। ASCII85-एन्कोडेड ब्लॉकों में, व्हाइटस्पेस और लाइन-ब्रेक वर्ण कहीं भी मौजूद हो सकते हैं, जिसमें 5-वर्ण ब्लॉक के बीच में भी शामिल हैं, लेकिन उन्हें चुपचाप नजरअंदाज कर दिया जाना चाहिए। एडोब का विनिर्देश y अपवाद का समर्थन नहीं करता है। ए. एस. सी. आई. 85 के लिए उदाहरण थॉमस हॉब्स के लेवियाथन का एक उद्धरणः मनुष्य को न केवल अपने कारण से, बल्कि अन्य जानवरों से इस एकल जुनून से प्रतिष्ठित किया जाता है, जो कि मन की एक वासना है, जो ज्ञान की निरंतर और अथक पीढ़ी में आनंद की दृढ़ता से, किसी भी शारीरिक सुख की छोटी तीव्रता से अधिक है। यदि इसे शुरू में यू. एस.-ए. एस. सी. आई. आई. का उपयोग करके कूटबद्ध किया जाता है, तो इसे ए. एस. सी. आई. 85 में निम्नानुसार पुनः कूटबद्ध किया जा सकता हैः 9जे. क्यू. ओ. ^ बी. एल. बी. डी.-बी. एल. बी. 1. डी. जे. + * + एफ (एफ, क्यू/0जे. एच. के. एफ. <जी. एल.> सी. जे. @. 4जी. पी. $डी. 7. एफ!, एल. 7 @<6 @)/0जे. डी. ई. एफ. <जी.% <+ ई. वी.: 2. एफ!, ओ <डी. जे. + *। @<* K0 @<6L (Df-\0Ec5e; DffZ (EZee.Bl.9pF "AGXBPCsi + DGM> @3BB F * & OCAfu2/AKYi (DIb: @FD, *) + C] U = @3BN #EcYf8ATD3s @q? d $AftVqCH [NqF <G: 8 + EV:. + Cf>-FD5W8ARlolDial (DId <j @<? 3r @: F% a + D58 'ATD4 $Bl@l3De:,-DJs' 8ARoFb / (E, 9) oF * 2M7/c चूँकि अंतिम 4-टुपल अधूरा है, इसलिए इसे तीन शून्य बाइट्स के साथ पैडेड किया जाना चाहिएः चूँकि पैडिंग के तीन बाइट्स जोड़े जाने थे, इसलिए तीन अंतिम वर्ण 'YkO' को आउटपुट से हटा दिया जाता है। डिकोडिंग व्युत्क्रम रूप से की जाती है, सिवाय इसके कि अंतिम 5-टुपल को 'यू' वर्णों के साथ पैडेड किया जाता हैः चूंकि इनपुट को तीन 'यू' बाइट्स के साथ पैडेड किया जाना था, इसलिए आउटपुट के अंतिम तीन बाइट्स को नजरअंदाज कर दिया जाता है और हम मूल अवधि के साथ समाप्त हो जाते हैं। इनपुट वाक्य में लगातार 4 शून्य बाइट्स नहीं होते हैं, इसलिए उदाहरण में 'z' संक्षिप्त नाम का उपयोग नहीं दिखाया गया है। संगतता ए. एस. सी. आई. 85 एन्कोडिंग 7-बिट और 8-बिट एम. आई. एम. ई. के साथ संगत है, जबकि बेस 64 की तुलना में कम ओवरहेड है। ए. एस. सी. आई. 85 की एक संभावित संगतता समस्या यह है कि इसके द्वारा उपयोग किए जाने वाले कुछ वर्ण एक्स. एम. एल. या एस. जी. एम. एल. जैसी मार्कअप भाषाओं में महत्वपूर्ण हैं। इन दस्तावेजों में ए. एस. सी. आई. आई. 85 डेटा को शामिल करने के लिए, उद्धरण, कोण कोष्ठक और एम्परसेंड से बचना आवश्यक हो सकता है। 1 अप्रैल, 1996 को प्रकाशित आर. एफ. सी. 1924 संस्करण, सूचनात्मकः रॉबर्ट एल्ज़ द्वारा "आई. पी. वी. 6 पतों का एक संक्षिप्त प्रतिनिधित्व" आई. पी. वी. 6 पतों के आधार-85 एन्कोडिंग का सुझाव देता है। यह ऊपर उपयोग की गई योजना से अलग है क्योंकि वह 85 ए. एस. सी. आई. आई. वर्णों के एक अलग समूह का प्रस्ताव करता है, और 128-बिट संख्या पर सभी अंकगणित करने का प्रस्ताव करता है, इसे चार 32-बिट समूहों में तोड़ने के बजाय एक एकल 20-अंकीय आधार-85 संख्या (आंतरिक श्वेत स्थान की अनुमति नहीं है) में परिवर्तित करता है। प्रस्तावित वर्ण समूह, क्रम में, 0-9, ए-जेड, ए-जेड, और फिर 23 वर्ण! #$% & () * +-; <=>? @^ _ '{।} ~ है। उच्चतम संभव प्रतिनिधित्व योग्य पता, 2128−1 = 74 × 8519 + 53 × 8518 + 5 × 8517 +., को = r54lj और NUUO ~ Hi% c2ym0 के रूप में कूटबद्ध किया जाएगा। इस वर्ण समूह में वर्ण "",./: [\] शामिल नहीं हैं, जो इसे जे. एस. ओ. एन. स्ट्रिंग्स में उपयोग के लिए उपयुक्त बनाता है (जहाँ "और\" को बचने की आवश्यकता होगी)। हालांकि, एसजीएमएल-आधारित प्रोटोकॉल के लिए, विशेष रूप से एक्सएमएल सहित, स्ट्रिंग एस्केप की अभी भी आवश्यकता हो सकती है (<,> और & को समायोजित करने के लिए)। विभिन्न एन्कोडिंग एल्गोरिदम पोस्टस्क्रिप्ट मानक एन्कोडिंग संदर्भ बाहरी लिंक बेसई91 पोस्टस्क्रिप्ट भाषा संदर्भ (एडोब) की तुलना के लिए बेस32 बेस36 बेस64 बाइनरी-टू-टेक्स्ट एन्कोडिंग भी देखें-एएससीआईआई85एनकोड फ़िल्टर बाइनरी-टू-टेक्स्ट एन्कोडिंग प्रारूप देखें।