الأدوات
الأدلة

ضغط وفك ضغط gzip / deflate / zlib

الترميز

اضغط أو فك ضغط النص باستخدام gzip أو deflate أو zlib. الإخراج بصيغة Base64 أو Hex مع مقارنة الحجم قبل/بعد.

100% من جهة العميل بدون خادم خلفي

لا يتم جلب الروابط البعيدة؛ الصق JSON مباشرة.

الاتجاه
الإدخال
الإخراج
أدخل نصًا للضغط، أو Base64/Hex لفك الضغط.
في هذه الصفحة

ما هو ضغط gzip؟#

gzip هو ضاغط النصوص والبايتات غير الفاقد للأغراض العامة المستخدم في كلّ مكان على الويب — يدعم ترويسة Content-Encoding: gzip في HTTP، وملفّات .gz التي تجلبها من الخوادم، وصيغة السلك لعدّ لا يُحصى من ناقلات السجلّات. يعمل بإيجاد أنماط بايتات مكرَّرة واستبدالها بمراجع قصيرة، فيتقلّص النصّ ذو التكرار (الكود المصدري، وJSON، وCSV، وأسطر السجلّات) بشكلٍ كبير، بينما بالكاد يتحرّك ما هو مضغوط أصلًا أو عشوائي (JPEGs، بايتات مشفّرة).

تقدّم هذه الصفحة الخوارزميات الثلاث المترابطة التي تُدمَج تحت اسم «gzip» في الكلام العادي، وهي تختلف فقط في الغلاف حول نواة DEFLATE نفسها:

  • gzip (RFC 1952) — الحزمة الكاملة: ترويسة ببايت سحري، والحُمولة المضغوطة، ومقطورة CRC32 + حجم. هذا ما تستخدمه ملفّات .gz وHTTP gzip.
  • deflate (RFC 1951) — تيار مضغوط خام بلا غلاف. أصغر مخرج، لكن بلا فحص سلامة؛ وبعض الواجهات البرمجية (الأقدم Content-Encoding: deflate) تتوقّع هذا تحديدًا.
  • zlib (RFC 1950) — ترويسة خفيفة ببايتين بالإضافة إلى فحص Adler-32، في منزلة بين الأخرىين.

ولأنّ المخرج المضغوط ثنائي، تُعرِضه الأداة بنصّ Base64 أو Hex لتتمكّن من نسخه أو لصقه في JSON أو تمريره إلى مكان آخر. ويفكّ الضغط العكسي: يقرأ Base64 أو Hex ويُعيد النصّ الأصلي بصيغة UTF-8.

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

  1. اختر الخوارزمية من شريط الأدوات: gzip، أو deflate، أو zlib.
  2. اختر الاتجاه: ضغط (نصّ داخلاً → Base64/Hex خارجًا) أو فك الضغط (Base64/Hex داخلاً → نصّ خارجًا).
  3. اختر ترميز الإخراج: Base64 أو Hex (في وضع فكّ الضغط يكون هذا المُحدِّد مقفلًا، إذ تكتشف الأداة الترميز تلقائيًّا).
  4. الصق في لوحة الإدخال على اليسار؛ ويُعرض حجم الإدخال في ترويستها. وتُملأ لوحة الإخراج بالنتيجة، بحجمها في الترويسة أيضًا.
  5. بعد الضغط، يظهر شريط قبل/بعد، مُظهرًا كم كبرت الحمولة أو تصاغرت. استخدم نسخ لأخذ النتيجة، أو تنزيل لحفظها ملفًّا بصيغة .gz. ومثال يحمّل سطر سجلّ نموذجيًّا؛ ومسح يُعيد كلّ شيء.

الميزات الرئيسية#

  • ثلاث خوارزميات، تحكّم واحد. بدِّل بين gzip وdeflate وzlib لترى بالضبط كيف يغيّر عبء الغلاف حجم المخرج للمدخل نفسه.
  • مقارنة حجم صادقة. يُظهر شريط قبل/بعد أعداد البايتات الحقيقية ونسبة التغيّر المُؤشَّرة — بما في ذلك الحالة التي يجعل فيها الضغط الحمولة أكبر، وهو أكثر ما يُفيد معرفته عن gzip.
  • اكتشاف الترميز تلقائيًّا عند الفك. الصق Base64 أو Hex وتكتشف الأداة أيّهما هو، فلا تضطرّ للتذكُّر.
  • UTF-8 صارم في رحلة العودة. إن لم تكن البايتات المفكوكة UTF-8 صالحة (خوارزمية خاطئة، حمولة مبتورة)، تقول الأداة ذلك بدلًا من إصدار محارف استبدال تخفي الخطأ.
  • يعمل في متصفحك. يجري الضغط محليًّا عبر مكتبة صغيرة تُحمَّل بكسل؛ وما تلصقه لا يغادر الصفحة.

مثال عملي#

ضغط سطر سجلّ واحد قصير — مدخل مثال 2026-08-06 INFO request handled path=/api/stats status=200 (58 بايت) — باستخدام gzip ومخرج Base64 يُعطي:

H4sIAHcNdmoAAzMyMDLTNbDQNTBT8PRz81coSi0sTS0uUchIzEvJSU1RKEgsybDVTyzI1C8uSSwpVgCRpcW2RgYGACs/7EA6AAAA

يكشف شريط قبل/بعد الجزء المضادّ للحدس: تلك الـ 58 بايتًا من النصّ العادي تصبح 75 بايت بعد ضغطها بـ gzip وترميزها Base64. فالمدخل كان قصيرًا وعشوائيًّا أكثر من أن يجد DEFLATE شيئًا يضغطه، فتراكمت ترويسة gzip والمقطورة وعبء Base64 (نحو 33%) فوق بعضها. هذا بالضبط لماذا يكون ضغط الحمولات الصغيرة بلا جدوى.

وبالمقارنة، نصّ متكرّر. ثماني نسخ من السطر transaction_id=txn_00001 status=paid amount=100 currency=usd\n تبلغ 488 بايت، ويُنزلها gzip إلى 84 بايت — نحو 17% من الأصل. هناك تكسب عمليّة الضغط تكسب رزقها: كلّما زاد التكرار، زاد التقلّص.

تبديل سطر السجلّ القصير نفسه إلى deflate يُنزل المخرج إلى 57 بايت (بلا ترويسة/مقطورة)، ويهبط zlib عند 63 بايت — مفيد حين تستهدف صيغة سلك محدّدة وتحتاج مطابقة الطرف الآخر تمامًا.

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

gzip أم deflate أم zlib — أيّها أختار؟#

طابِق الطرف الآخر. لملفّات .gz، وContent-Encoding: gzip في HTTP، ولكلّ حمولة واجهة برمجية «مضغوطة» تقريبًا، استخدم gzip. واستخدم deflate فقط حين تُوثِّق واجهة برمجية DEFLATE خام صراحةً (بعض خوادم Content-Encoding: deflate القديمة). واستخدم zlib حين تُسمّيه مكتبة أو بروتوكول صراحةً. عند الشكّ، gzip هو الافتراضي الآمن.

مخرجي أكبر من المدخل. هل هذه ثغرة؟#

لا — هكذا تعمل عمليّة الضغط غير الفاقدة على مدخل صغير أو عالي الإنتروبيا. هناك عبء ثابت لكلّ تيار (ترويسة، مقطورة، تسخين القاموس)، وإن كان المحتوى قليل التكرار، فلا يستطيع DEFLATE تعويضه. قاعدة عملية: يبدأ gzip بالفوز باطمئنان على حمولات ببضع مئات من البايتات أو أكثر، خاصّةً النصّ ذا التكرار. وللقيم الصغيرة، تخطَّى الضغط.

فكّ الضغط يخبرني أنّ البيانات ليست UTF-8 صالحة. ما الذي خطأ؟#

عادةً واحد من ثلاثة: اخترت الخوارزمية الخطأ (البيانات كانت مضغوطة بـ zlib فاخترت gzip، أو العكس)، أو أنّ Base64/Hex بُتِرت أو بها مسافات بيضاء طارئة في المنتصف، أو أنّ الأصل كان ثنائيًّا لا نصًّا. جرّب الخوارزميات الأخرى بالتوالي، وتحقّق أنّ شيئًا لم يُقصّ من الحمولة الملصوقة.

هل تستطيع هذه ضغط الصور أو الفيديو أو الملفّات المضغوطة أصلًا؟#

يمكنك لصق أيّ شيء، لكنك نادرًا ما تكسب شيئًا. فالصيغ مثل JPEG وPNG وMP4 و.zip/.gz مضغوطة أصلًا، فلا يبقى لدى DEFLATE ما يعصره — سيكون المخرج نحو الحجم نفسه أو أكبر قليلًا. gzip أداة للنصّ والبيانات المهيكلة، لا جولة ثانية على وسائط ثنائية.