Ascii85 एनकोडर और डिकोडर

टेक्स्ट, हेक्स बाइट या फ़ाइलों को Ascii85 में बदलें और वापस पाएँ, जो PostScript और PDF में इस्तेमाल होने वाला Base85 वेरिएंट है। Adobe डिलिमिटर जोड़ें या लंबे आउटपुट को लाइनों में रैप करें।

पूरी तरह आपके ब्राउज़र में चलता है। कुछ भी अपलोड नहीं होता।

उपयोग कैसे करें

  1. टेक्स्ट या बाइट को Ascii85 में बदलने के लिए “एनकोड करें” चुनें, या Ascii85 को वापस डेटा में बदलने के लिए “डिकोड करें” चुनें।
  2. अगर आउटपुट PostScript में जाना है या उसे adobe=True के साथ Python के a85encode से मेल खाना है, तो “डिलिमिटर <~ ~>” चालू करें।
  3. चाहें तो “लाइन रैप” सेट करें, ताकि लंबा आउटपुट कई लाइनों में बँट जाए।
  4. टेक्स्ट टाइप या पेस्ट करें या कोई फ़ाइल खोलें, फिर परिणाम कॉपी करें या डाउनलोड करें। डिकोड करते समय डिलिमिटर, स्पेस और लाइन ब्रेक अनदेखे कर दिए जाते हैं।

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.is6=FqH2Dd%#Er
你好jLq5JV7c

अक्सर पूछे जाने वाले प्रश्न

Ascii85 और Base85 में क्या अंतर है?
दोनों 4 बाइट को 5 अक्षरों में एनकोड करते हैं, लेकिन अलग-अलग वर्णमालाओं के साथ। Ascii85 ! से u तक की रेंज का उपयोग करता है और इसमें z शॉर्टकट होता है। Base85 पेज Git और Python b85encode वाली RFC 1924 वर्णमाला का उपयोग करता है, और Z85 ZeroMQ का वेरिएंट है।
मेरे आउटपुट में z अक्षर क्यों है?
हर z किसी पूरे समूह के चार शून्य बाइट को दर्शाता है। डिकोडर उसे अपने-आप वापस फैला देते हैं, इसलिए डेटा में कोई बदलाव नहीं होता।
क्या Adobe डिलिमिटर ज़रूरी हैं?

केवल तभी, जब डेटा पढ़ने वाला प्रोग्राम उनकी अपेक्षा करता हो, जैसे कोई PostScript इंटरप्रेटर या adobe=True के साथ Python का a85decode। कई टूल उनके बिना भी Ascii85 स्वीकार करते हैं। यहाँ डिकोड करते समय डिलिमिटर वैकल्पिक हैं।

क्या PDF की ASCII85 स्ट्रीम डिकोड की जा सकती है?

हाँ। स्ट्रीम डेटा पेस्ट करें और हेक्स आउटपुट चुनें या परिणाम डाउनलोड करें। अगर स्ट्रीम के फ़िल्टर में ASCII85Decode के बाद FlateDecode भी लिखा है, तो डिकोड किए गए बाइट अब भी zlib से कंप्रेस्ड हैं और उन्हें एक और चरण से गुज़ारना होगा।

अमान्य अक्षर की त्रुटि क्यों आती है?
Ascii85 में केवल ! से u तक के अक्षर, और समूहों के बीच z, मान्य हैं। चार स्पेस के लिए y संक्षेप, जिसका उपयोग btoa के कुछ वर्ज़न और foldspaces=True के साथ Python करते हैं, Adobe फ़ॉर्मैट का हिस्सा नहीं है, इसलिए उसे अस्वीकार कर दिया जाता है।