उपयोग कैसे करें
- टेक्स्ट या बाइट को Ascii85 में बदलने के लिए “एनकोड करें” चुनें, या Ascii85 को वापस डेटा में बदलने के लिए “डिकोड करें” चुनें।
- अगर आउटपुट PostScript में जाना है या उसे adobe=True के साथ Python के a85encode से मेल खाना है, तो “डिलिमिटर <~ ~>” चालू करें।
- चाहें तो “लाइन रैप” सेट करें, ताकि लंबा आउटपुट कई लाइनों में बँट जाए।
- टेक्स्ट टाइप या पेस्ट करें या कोई फ़ाइल खोलें, फिर परिणाम कॉपी करें या डाउनलोड करें। डिकोड करते समय डिलिमिटर, स्पेस और लाइन ब्रेक अनदेखे कर दिए जाते हैं।
Ascii85 क्या है?
Ascii85 इनपुट को एक बार में 4 बाइट पढ़ता है, हर समूह को एक 32-बिट संख्या मानता है और उसे आधार 85 के 5 अंकों के रूप में लिखता है। ये अंक ! (कोड 33) से u (कोड 117) तक के 85 लगातार ASCII अक्षर हैं: हर अक्षर बस अंक के मान में 33 जोड़कर मिलता है। आउटपुट इनपुट से 25% बड़ा होता है, जबकि Base64 में यह बढ़त 33% होती है।
इस फ़ॉर्मैट का सबसे पहले उपयोग Unix की btoa यूटिलिटी में हुआ था। Adobe ने इसे PostScript Level 2 और PDF की ASCII base-85 एनकोडिंग के रूप में अपनाया, जहाँ इसकी मदद से इमेज और फ़ॉन्ट जैसा बाइनरी डेटा एक सादी टेक्स्ट फ़ाइल के अंदर भेजा जा सकता है। Python इसे base64.a85encode() के रूप में और Go encoding/ascii85 पैकेज के रूप में देता है।
z शॉर्टकट और Adobe डिलिमिटर
चार शून्य बाइट का समूह सामान्य रूप से पाँच विस्मयादिबोधक चिह्नों के रूप में लिखा जाता। Ascii85 इसके बजाय उसे एक अकेले z के रूप में लिखता है, जिससे ख़ाली डेटा के लंबे हिस्से छोटे रहते हैं। यह शॉर्टकट केवल पूरे समूहों पर लागू होता है। जब इनपुट की लंबाई 4 का गुणज नहीं होती, तो n बाइट का अंतिम समूह n + 1 अक्षर बनता है और उसे कभी संक्षिप्त नहीं किया जाता।
PostScript किसी Ascii85 स्ट्रिंग की शुरुआत में <~ और अंत में ~> लगाता है। ASCII85Decode फ़िल्टर वाली PDF स्ट्रीम में केवल समापन वाला ~> इस्तेमाल होता है, डेटा के अंत के चिह्न के रूप में। यहाँ का डिकोडर इनमें से कोई भी डिलिमिटर मौजूद हो तो उसे हटा देता है और व्हाइटस्पेस को अनदेखा करता है, इसलिए आप PDF या PostScript फ़ाइल का स्ट्रीम डेटा सीधे पेस्ट कर सकते हैं।
कोड में Ascii85
# Python 3.4+
import base64
base64.a85encode(b'hello') # b'BOu!rDZ'
base64.a85encode(b'hello', adobe=True) # b'<~BOu!rDZ~>'
base64.a85decode(b'<~BOu!rDZ~>', adobe=True) # b'hello'
// Go
import "encoding/ascii85"
dst := make([]byte, ascii85.MaxEncodedLen(len(src)))
n := ascii85.Encode(dst, src)
तकनीकी विवरण
| वर्णमाला | ASCII 33 (!) से 117 (u) तक, साथ में z |
|---|---|
| आउटपुट का आकार | हर 4 बाइट पर 5 अक्षर (125%) |
| पैडिंग | कोई नहीं, <~ ~> डिलिमिटर वैकल्पिक |
| मानक | Adobe PostScript और PDF |
| केस-संवेदी | हाँ |
उदाहरण
| इनपुट (UTF-8) | आउटपुट |
|---|---|
Hello, World! | 87cURD_*#4DfTZ)+T |
Base64.is | 6=FqH2Dd%#Er |
你好 | jLq5JV7c |
अक्सर पूछे जाने वाले प्रश्न
Ascii85 और Base85 में क्या अंतर है?
मेरे आउटपुट में z अक्षर क्यों है?
z किसी पूरे समूह के चार शून्य बाइट को दर्शाता है। डिकोडर उसे अपने-आप वापस फैला देते हैं, इसलिए डेटा में कोई बदलाव नहीं होता।क्या Adobe डिलिमिटर ज़रूरी हैं?
केवल तभी, जब डेटा पढ़ने वाला प्रोग्राम उनकी अपेक्षा करता हो, जैसे कोई PostScript इंटरप्रेटर या adobe=True के साथ Python का a85decode। कई टूल उनके बिना भी Ascii85 स्वीकार करते हैं। यहाँ डिकोड करते समय डिलिमिटर वैकल्पिक हैं।
क्या PDF की ASCII85 स्ट्रीम डिकोड की जा सकती है?
हाँ। स्ट्रीम डेटा पेस्ट करें और हेक्स आउटपुट चुनें या परिणाम डाउनलोड करें। अगर स्ट्रीम के फ़िल्टर में ASCII85Decode के बाद FlateDecode भी लिखा है, तो डिकोड किए गए बाइट अब भी zlib से कंप्रेस्ड हैं और उन्हें एक और चरण से गुज़ारना होगा।
अमान्य अक्षर की त्रुटि क्यों आती है?
! से u तक के अक्षर, और समूहों के बीच z, मान्य हैं। चार स्पेस के लिए y संक्षेप, जिसका उपयोग btoa के कुछ वर्ज़न और foldspaces=True के साथ Python करते हैं, Adobe फ़ॉर्मैट का हिस्सा नहीं है, इसलिए उसे अस्वीकार कर दिया जाता है।