FreeToGenerate.com

رمّز وفكّ الترميز، واعرف هل كان base64 أصغر. لا يُرفع شيء.

الاتجاه

Hi Ana,

The caf=C3=A9 meeting is confirmed for 3 PM =E2=80=94 see you there!

Thanks

‏quoted-printable أم base64 لهذا النص؟

بايت في المدخل
75
تحتاج ترميزًا
6.7‎%‎
quoted-printable
89
base64
102

‏quoted-printable أصغر هنا، ويبقى مقروءًا فوق ذلك.

يقدّم RFC 2045 الترميزين للعمل نفسه ويترك لك الاختيار. ينفق quoted-printable محرفًا واحدًا على كل ثُماني يستطيع تركه كما هو وثلاثة على كل ثُماني لا يستطيع، فهو يكافئ النص الذي جلّه ASCII؛ أما base64 فينفق أربعة محارف لكل ثلاثة بايتات مهما كانت.

أين يتقدّم base64

نقطة التعادل، المحتوى وحده
16.7‎%‎
نقطة التعادل، مع فواصل الأسطر
15.8‎%‎

يكلّف quoted-printable محرفًا واحدًا عن كل ثُماني يستطيع تركه حرفيًا وثلاثة عن كل ثُماني لا يستطيع، أي ‎1 + 2p لنص يجب ترميز نسبة p من بايتاته. أما base64 فيكلّف 4/3 لكل بايت مهما كان. وبمساواة الطرفين يخرج p = 1/6: فعند نحو 16.7‏% من البايتات غير ASCII يتعادل الاثنان، وفوقها يفوز base64.

وهذا الرقم يهمل فواصل الأسطر، وحسابها يزحزحه. فعلى الترميزين أن يبقيا الأسطر ضمن 76 محرفًا، لكن الفاصل اللين في quoted-printable يكلّف ثلاثة محارف — علامة اليساوي ثم الفاصل نفسه — بينما يكلّف فاصل base64 اثنين. الكلفتان لا تتعادلان، وبحمل كلتيهما تقع نقطة التعادل الحقيقية قرب 15.8‏%. تصحيح صغير، والحدس الخاطئ سهل الوقوع: تبدو الحسبة متناظرة إلى أن تعدّ علامة اليساوي.

لماذا يظهر ‎=20 في آخر السطر

المسافة من المحارف التي يجوز لـ quoted-printable تركها كما هي، فتظهر عادةً على حالها. غير أن ثمة استثناءً، وهو بعينه سبب رؤيتك ‎=20 في البريد الحقيقي: يجب ترميز المسافة أو الجدولة حين تقع في آخر السطر. والمواصفة صريحة في تعليل ذلك، فمن الخوادم ما يُعرف عنه حشو الأسطر بالمسافات ومنها ما يحذف المسافة الأخيرة، فقد لا تصل مسافة تُركت ظاهرة في آخر السطر. وترميزها هو ما يحفظها.

بُني وفق القسم 6.7 من RFC 2045 وقوبل بتنفيذ quoted-printable في بايثون، في الاتجاهين معًا. لا يُرفع شيء، فالترميز يجري داخل هذا التبويب.

متوفر أيضًا بلغات أخرى: English · Español · Português · Français

مرمِّز وفاكّ ترميز quoted-printable

حوّل النص إلى quoted-printable ومنه، مع مقارنة الحجم بـ base64 التي تحسم أيّهما ينبغي أن تستعمل فعلًا.

ما هو quoted-printable؟

‏quoted-printable إحدى طريقتين ينقل بهما البريد نصًا لا يصمد في قناة من سبع بتات. يعرّفه RFC 2045، وهو المستند نفسه الذي يعرّف base64، وكلاهما بديل عن الآخر للعمل ذاته تمامًا. وحيلته أن يترك كل ما هو آمن أصلًا على حاله ويهرّب ما ليس كذلك وحده، فيكتب كل بايت مزعج على هيئة علامة يساوٍ ورقمين ست عشريين، فيصير الحرف المشكول شيئًا مثل ‎=C3=A9 ويبقى ما حوله مقروءًا.

وهذه المقروئية هي المقصد كله. فرسالة base64 كتلة صمّاء، أما رسالة quoted-printable فهي النص الأصلي تتخلله هروبات، ولذلك تستطيع عادةً أن تفتح المصدر الخام لرسالة وتفهم ما تقول. وإن سبق أن رأيت ‎=E2=80=99 في موضع فاصلة عليا، فقد رأيت quoted-printable معروضًا دون فكّ ترميزه.

وتعمل هذه الأداة في الاتجاهين. ترمّز النص إلى quoted-printable وتفكّه راجعًا، وتخبرك إلى جانب النتيجة هل كان base64 أصغر لما أعطيتَها، لأنه كذلك في بعض المدخلات فعلًا، والمواصفة تترك لك هذا الاختيار.

كيفية الاستخدام

  1. اختر الاتجاه. يحوّل الترميز النص العادي إلى quoted-printable، ويأخذ فكّ الترميز نص quoted-printable فيعيد لك النص. ويتحدث المخرج أثناء كتابتك.
  2. ألصق نصك. كل شيء يصلح: جملة، أو متن رسالة كاملة، أو الجزء المشوَّه من بريد تصحّحه. وتُعالَج فواصل الأسطر كما تشترط المواصفة.
  3. اقرأ المقارنة. تحت المخرج حجمُ نصك في الترميزين وأيّهما يفوز. وعند فكّ الترميز يظهر هناك أيضًا كل ما يخرج في المدخل عن القواعد.

‏quoted-printable أم base64، وأين الحدّ بينهما

للترميزين نموذجا كلفة مختلفان تمامًا، فالجواب يتوقف على النص لا على التفضيل. ينفق quoted-printable محرفًا واحدًا على كل بايت يستطيع تركه كما هو وثلاثة على كل بايت لا يستطيع، فالنص الذي يحتاج تهريب نسبة p من بايتاته يكلّف ‎1 + 2p لكل بايت. أما base64 فينفق أربعة محارف عن كل ثلاثة بايتات مهما كانت، أي 4/3. وبمساواة الطرفين يخرج p = 1/6: فعند نحو 16.7‏% من البايتات غير ASCII يتعادل الاثنان، وفوق ذلك يفوز base64.

وهذا الرقم يهمل فواصل الأسطر، وحسابها يزحزحه أقل من نقطة واحدة، لكن في اتجاه يسهل عكسه. فعلى الترميزين أن يبقيا الأسطر ضمن 76 محرفًا. والفاصل اللين في quoted-printable يكلّف ثلاثة محارف، لأن علامة اليساوي التي تدل عليه واحد منها، بينما يكلّف فاصل base64 اثنين. الكلفتان لا تتعادلان، وبحملهما معًا تقع نقطة التعادل الحقيقية أقرب إلى 15.8‏%. تبدو الحسبة متناظرة إلى اللحظة التي تعدّ فيها علامة اليساوي.

وينقسم هذا عمليًا بحسب نظام الكتابة. فالرسالة بالإنجليزية أو الفرنسية أو الإسبانية أو البرتغالية جلّها ASCII مع بضع علامات تشكيل، فيخرج quoted-printable في نحو ثلاثة أرباع حجم base64 ويبقى مقروءًا فوق ذلك. أما الرسالة بالعربية أو اليابانية فغير ASCII من أولها إلى آخرها، وquoted-printable يزيد حجمها على الضعف: هذه محلّها base64، ولا يغيّر ذلك أي تفضيل.

ومعرفة هذا مفيدة لأن كثيرًا من البرمجيات يختار أحدهما ولا يعود إلى المسألة أبدًا. فإن كان بريدك بالحرف اللاتيني غالبًا، فـ quoted-printable أصغر ومقروء في آن. وإن لم يكن، فأنت تدفع ثلاثة محارف عن كل بايت بلا مقابل.

حدود معلنة

ثمة قاعدة تفاجئ الناس، وهي سبب ظهور ‎=20 في أواخر الأسطر. فالمسافة تُترك عادةً كما هي، لكن المسافة أو الجدولة التي تقع في آخر السطر يجب ترميزها. وRFC 2045 صريح على غير المعتاد في تعليل ذلك: فمن خوادم البريد ما يُعرف عنه حشو الأسطر بالمسافات ومنها ما يحذف المسافة الأخيرة، فقد لا تصل مسافة تُركت ظاهرة في آخر السطر. وترميزها هو السبيل الوحيد لضمان بقائها.

وعند فكّ الترميز تُبلِغ هذه الأداة ولا تُصلِح. فالمواصفة تختم تعريفها بقائمة أشياء لا يستطيع مرمِّز سليم إنتاجها أبدًا — أرقام ست عشرية صغيرة، وعلامة يساوٍ يتلوها ما ليس ست عشريًا، وعلامة يساوٍ في آخر النص، وبايتات خام فوق 126، وأسطر تتجاوز 76 محرفًا — وتقترح كيف ينبغي لفاكّ الترميز أن يتصرف مع كل حالة. وهذه الأداة تتبع تلك الاقتراحات ثم تخبرك بما وجدت، لأنك إن كنت تفكّ ترميز رسالة معطوبة فالأرجح أنك تريد أن تعلم أنها كانت كذلك.

وللمرمِّزات أيضًا أن تختلف فيما بينها. فالمواصفة تقول إن المحارف القابلة للطباعة يجوز تركها كما هي، لا إنه يجب، فقد ينتج تنفيذان سليمان مخرجين مختلفين للمدخل نفسه ويكونان محقّين معًا. ولهذا قوبلت هذه الأداة بالتأكد من أن مخرجها ومخرج تنفيذ مرجعي يُفكّان إلى البايتات نفسها في الاتجاهين، بدل اشتراط تطابق النصين حرفًا بحرف.

وثمة فرق حقيقي يستحق التنبيه: نهايات الأسطر. تُوحّد هذه الأداة الفواصل إلى CRLF، وهي الصورة التي تسميها المواصفة قياسية للنص. وبعض التنفيذات تُبقي ما أُعطيت. وكلا الأمرين مباح، ومعناه أن مقارنة بايتًا ببايت بين أداتين قد تختلف في نهايات الأسطر وحدها دون أن تكون إحداهما مخطئة.

لماذا هي مجانية؟

كل شيء يجري داخل متصفحك. واستبدال متتاليات هروب بالبايتات ليس عملًا يحتاج خادمًا، فلا شيء يُشغَّل ولا شيء يُتقاضى عليه ولا حساب يُنشأ.

لا يُرفع شيء مما تلصقه ولا يُخزَّن ولا يُسجَّل. فمتن الرسالة من أكثر ما قد يضعه أحد في صندوق نص خصوصية، والسبيل الوحيد الموثوق للتعامل مع ذلك ألا نستقبله أصلًا.