طريقة الاستخدام
- اختر «ترميز» لتحويل النص أو البايتات إلى Base85، أو «فك الترميز» لإعادة Base85 إلى بيانات.
- اكتب المدخلات أو الصقها، أو افتح ملفًا. غيّر «صيغة المدخلات» إلى «ست عشري» إذا كنت تعمل على بايتات خام.
- تتحدّث النتيجة فور الكتابة. وعند فك الترميز، اختر «نص» أو «ست عشري» في «صيغة المخرجات» حسب محتوى البيانات.
- انسخ النتيجة أو نزّلها كملف.
ما هو Base85؟
Base85 عائلة من الترميزات تحوّل كل 4 بايتات إلى 5 أحرف. فخمسة أرقام بالأساس 85 تستوعب 85 × 85 × 85 × 85 × 85 = 4,437,053,125 قيمة، وهذا يكفي بالكاد لأي عدد من 32 بت، لذا تزيد المخرجات على المدخلات بنسبة 25% فقط، مقابل 33% في Base64.
توجد عدة أبجديات لـ Base85 ولا يمكن استخدام إحداها مكان الأخرى: Ascii85 (Adobe وPDF) وZ85 (ZeroMQ) والأبجدية المستخدمة في هذه الصفحة. وهي تتكوّن من 0-9 وA-Z وa-z و23 رمزًا: !#$%&()*+-;<=>?@^_`{|}~. وتُستبعد منها علامات الاقتباس والفاصلة والنقطة والشرطة المائلة والنقطتان والشرطة المائلة العكسية والأقواس المربعة.
RFC 1924 وGit وPython
تأتي مجموعة الأحرف من RFC 1924 بعنوان «A Compact Representation of IPv6 Addresses»، الذي نُشر في 1 أبريل 1996 على سبيل دعابة كذبة أبريل. وقد اقترح كتابة عنوان IPv6 المكوّن من 128 بت على هيئة عدد واحد بالأساس 85 من 20 حرفًا بالضبط. لا أحد يكتب عناوين IPv6 بهذه الطريقة، لكن الأبجدية أُعيد استخدامها لاحقًا للبيانات الثنائية عمومًا:
- Git يخزّن الملفات الثنائية في الرقع (
git diff --binaryوgit format-patch) على هيئة بيانات مضغوطة بـ zlib ومرمّزة بهذه الأبجدية، مع حرف يدل على الطول في بداية كل سطر. - Python يوفّر منذ الإصدار 3.4 الدالتين
base64.b85encode()وb85decode()، ومخرجاتهما مطابقة لمخرجات هذه الأداة. - Mercurial يستخدم الترميز نفسه للملفات الثنائية في الفروقات بأسلوب Git.
لاحظ أن RFC 1924 يحوّل العنوان المكوّن من 128 بت دفعة واحدة، بينما يعمل Git وPython وهذه الأداة على مجموعات من 4 بايتات، لذا تعطي القيمة المكوّنة من 16 بايت نتيجة مختلفة عن طريقة RFC.
المجموعات الأخيرة القصيرة
عندما لا يكون طول المدخلات من مضاعفات 4، تُملأ المجموعة الأخيرة ببايتات صفرية وتُرمَّز، ثم يُحتفظ بأول n + 1 حرف فقط: فالبايت الواحد يصبح حرفين، والبايتان يصبحان 3 أحرف، والبايتات الثلاثة تصبح 4 أحرف. وتعكس أداة فك الترميز هذه العملية، فلا حاجة إلى أحرف حشو. وليس في هذه النسخة اختصار للبايتات الصفرية، على خلاف z في Ascii85.
# Python 3.4+
import base64
base64.b85encode(b'hello') # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv') # b'hello'
المواصفات
| الأبجدية | 0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~ |
|---|---|
| حجم المخرجات | 5 أحرف لكل 4 بايتات (125%) |
| الحشو | لا يوجد |
| المعيار | مجموعة أحرف RFC 1924 (Git وPython b85) |
| حساس لحالة الأحرف | نعم |
أمثلة
| المدخلات (UTF-8) | المخرجات |
|---|---|
Hello, World! | NM&qnZ!92JZ*pv8Ap |
Base64.is | LSb`dHZ(42a{ |
你好 | <h`KfrM& |
الأسئلة الشائعة
هل Base85 هو نفسه Ascii85؟
z، وقد يُحاط بمحددات Adobe. استخدم صفحة Ascii85 لبيانات PDF وPostScript.هل كان RFC 1924 معيارًا حقيقيًا؟
لا. إنه RFC إعلامي نُشر على سبيل دعابة كذبة أبريل، ولم يُستخدم قط لعناوين IPv6. وقد اشتهرت مجموعة أحرفه لاحقًا بفضل Git وPython.
كم تزيد مخرجات Base85 في الحجم؟
هل يمكنني وضع Base85 في JSON أو XML؟
< و> و&. وBase85 ليس آمنًا لعناوين URL.