طريقة الاستخدام
- اختر «ترميز» لتحويل النص أو البايتات إلى Ascii85، أو «فك الترميز» لإعادة Ascii85 إلى بيانات.
- فعّل «المحددات <~ ~>» إذا كانت المخرجات ستُستخدم في PostScript أو يجب أن تطابق مخرجات a85encode في Python مع adobe=True.
- يمكنك اختياريًا ضبط «التفاف الأسطر» لتقسيم المخرجات الطويلة إلى أسطر.
- اكتب المدخلات أو الصقها أو افتح ملفًا، ثم انسخ النتيجة أو نزّلها. وعند فك الترميز، تُتجاهل المحددات والمسافات وفواصل الأسطر.
ما هو Ascii85؟
يقرأ Ascii85 المدخلات 4 بايتات في كل مرة، ويعامل كل مجموعة على أنها عدد من 32 بت ويكتبها على هيئة 5 أرقام بالأساس 85. وهذه الأرقام هي أحرف ASCII الـ 85 المتتالية من ! (الرمز 33) إلى u (الرمز 117): فكل حرف هو ببساطة قيمة الرقم مضافًا إليها 33. وتزيد المخرجات على المدخلات بنسبة 25%، مقابل 33% في Base64.
استُخدمت هذه الصيغة أول مرة في الأداة btoa على Unix، ثم اعتمدتها Adobe بوصفها ترميز ASCII بالأساس 85 في PostScript Level 2 وPDF، حيث تتيح نقل البيانات الثنائية، مثل الصور والخطوط، داخل ملف نصي عادي. وتوفّرها Python عبر base64.a85encode()، وتوفّرها Go عبر الحزمة encoding/ascii85.
اختصار z ومحددات Adobe
تُكتب مجموعة من أربعة بايتات صفرية عادةً على هيئة خمس علامات تعجب، لكن Ascii85 يكتبها بدلًا من ذلك على هيئة حرف z واحد، ما يُبقي سلاسل البيانات الفارغة قصيرة. ولا ينطبق هذا الاختصار إلا على المجموعات الكاملة. فعندما لا يكون طول المدخلات من مضاعفات 4، تصبح المجموعة الأخيرة المكوّنة من n بايت n + 1 حرف، ولا تُختصر أبدًا.
يحدّد PostScript سلسلة Ascii85 بالرمز <~ في البداية و~> في النهاية. أما في تدفق PDF الذي يستخدم المرشّح ASCII85Decode، فلا يُستخدم إلا الرمز الختامي ~> علامةً على نهاية البيانات. وتزيل أداة فك الترميز هنا أيًّا من المحددين إن وُجد وتتجاهل المسافات البيضاء، لذا يمكنك لصق بيانات التدفق من ملف 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 |
|---|---|
| حجم المخرجات | 5 أحرف لكل 4 بايتات (125%) |
| الحشو | لا يوجد، مع محددات <~ ~> اختيارية |
| المعيار | Adobe PostScript وPDF |
| حساس لحالة الأحرف | نعم |
أمثلة
| المدخلات (UTF-8) | المخرجات |
|---|---|
Hello, World! | 87cURD_*#4DfTZ)+T |
Base64.is | 6=FqH2Dd%#Er |
你好 | jLq5JV7c |
الأسئلة الشائعة
ما الفرق بين Ascii85 وBase85؟
لماذا تحتوي مخرجاتي على الحرف z؟
z أربعة بايتات صفرية في مجموعة كاملة. وتعيد أدوات فك الترميز توسيعه تلقائيًا، فتبقى البيانات دون تغيير.هل أحتاج إلى محددات Adobe؟
فقط إذا كان البرنامج الذي يقرأ البيانات يتوقعها، مثل مفسّر PostScript أو الدالة a85decode في Python مع adobe=True. وتقبل أدوات كثيرة Ascii85 دونها. وعند فك الترميز هنا، تكون المحددات اختيارية.
هل يمكنني فك ترميز تدفق ASCII85 من ملف PDF؟
نعم. الصق بيانات التدفق واختر «ست عشري» في «صيغة المخرجات» أو نزّل النتيجة. وإذا كانت مرشّحات التدفق تذكر FlateDecode بعد ASCII85Decode، فإن البايتات الناتجة عن فك الترميز لا تزال مضغوطة بـ zlib وتحتاج إلى خطوة ثانية.
لماذا يظهر لي خطأ «حرف غير صالح»؟
! إلى u، إضافة إلى z بين المجموعات. أما الاختصار y لأربع مسافات، الذي تستخدمه بعض إصدارات btoa وكذلك Python مع foldspaces=True، فليس جزءًا من صيغة Adobe ويُرفض.