أداة ترميز Ascii85 وفك ترميزه

حوّل النصوص أو البايتات الست عشرية أو الملفات إلى Ascii85، وهو نوع Base85 المستخدم في PostScript وPDF، وبالعكس. أضف محددات Adobe أو قسّم المخرجات الطويلة إلى أسطر.

تعمل بالكامل داخل متصفحك، ولا يُرفع أي شيء.

طريقة الاستخدام

  1. اختر «ترميز» لتحويل النص أو البايتات إلى Ascii85، أو «فك الترميز» لإعادة Ascii85 إلى بيانات.
  2. فعّل «المحددات <~ ~>» إذا كانت المخرجات ستُستخدم في PostScript أو يجب أن تطابق مخرجات a85encode في Python مع adobe=True.
  3. يمكنك اختياريًا ضبط «التفاف الأسطر» لتقسيم المخرجات الطويلة إلى أسطر.
  4. اكتب المدخلات أو الصقها أو افتح ملفًا، ثم انسخ النتيجة أو نزّلها. وعند فك الترميز، تُتجاهل المحددات والمسافات وفواصل الأسطر.

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

الأسئلة الشائعة

ما الفرق بين Ascii85 وBase85؟
كلاهما يرمّز 4 بايتات إلى 5 أحرف، لكن بأبجديات مختلفة. يستخدم Ascii85 النطاق من ! إلى u ويتضمن اختصار z. أما صفحة Base85 فتستخدم أبجدية RFC 1924 التي يعتمدها Git والدالة b85encode في Python، وZ85 هو النوع الخاص بـ ZeroMQ.
لماذا تحتوي مخرجاتي على الحرف z؟
يمثّل كل z أربعة بايتات صفرية في مجموعة كاملة. وتعيد أدوات فك الترميز توسيعه تلقائيًا، فتبقى البيانات دون تغيير.
هل أحتاج إلى محددات Adobe؟

فقط إذا كان البرنامج الذي يقرأ البيانات يتوقعها، مثل مفسّر PostScript أو الدالة a85decode في Python مع adobe=True. وتقبل أدوات كثيرة Ascii85 دونها. وعند فك الترميز هنا، تكون المحددات اختيارية.

هل يمكنني فك ترميز تدفق ASCII85 من ملف PDF؟

نعم. الصق بيانات التدفق واختر «ست عشري» في «صيغة المخرجات» أو نزّل النتيجة. وإذا كانت مرشّحات التدفق تذكر FlateDecode بعد ASCII85Decode، فإن البايتات الناتجة عن فك الترميز لا تزال مضغوطة بـ zlib وتحتاج إلى خطوة ثانية.

لماذا يظهر لي خطأ «حرف غير صالح»؟
لا يسمح Ascii85 إلا بالأحرف من ! إلى u، إضافة إلى z بين المجموعات. أما الاختصار y لأربع مسافات، الذي تستخدمه بعض إصدارات btoa وكذلك Python مع foldspaces=True، فليس جزءًا من صيغة Adobe ويُرفض.