การเข้ารหัส

Gzip/Deflate ↔ Base64

บีบอัดข้อความเป็น Gzip หรือ Deflate แล้วเข้ารหัสผลลัพธ์เป็น Base64 — และย้อนกลับ ทำงานผ่าน Compression Streams API ในเบราว์เซอร์โดยตรง

Base64 by itself doesn't compress anything — quite the opposite, it grows the size by about 33%. To send large text compactly through a text-only channel, it's first compressed with Gzip or Deflate, and only then is the result Base64-encoded.

How to use it

Common uses

Things to keep in mind

Compression only pays off on sufficiently large, compressible text — on short strings the Gzip header overhead plus the Base64 expansion can actually make the result bigger.

Deflate skips Gzip's headers, so its output is more compact, but the format is less self-describing: the receiving side needs to know in advance that it's Deflate specifically.

บทความเกี่ยวกับเครื่องมือนี้: Gzip + Base64: บีบอัดข้อมูลเพื่อส่งเป็นข้อความ

คำถามที่พบบ่อย

Gzip กับ Deflate ในเครื่องมือนี้ต่างกันอย่างไร?

Gzip ห่อข้อมูลที่บีบอัดด้วยส่วนหัวและค่าตรวจสอบ CRC ท้ายไฟล์ ส่วน Deflate คือกระแสข้อมูลบีบอัดดิบที่ไม่มีส่วนห่อนั้น ข้อมูลที่บีบอัดด้วยรูปแบบหนึ่งจะถอดด้วยอีกรูปแบบไม่ได้ — ตรวจสอบให้แน่ใจว่ารูปแบบที่เลือกตรงกับวิธีสร้างข้อมูลนั้น

ทำไมต้องเข้ารหัส Base64 ข้อมูลที่บีบอัดแล้ว?

ผลลัพธ์ของ Gzip/Deflate เป็นไบนารีดิบ ซึ่งอยู่ในบริบทข้อความอย่าง URL, JSON หรือไฟล์คอนฟิกได้ไม่ดี การเข้ารหัส Base64 จะเปลี่ยนข้อมูลไบนารีนั้นให้เป็นข้อความ ASCII ที่ปลอดภัยและคัดลอกได้

ทำไมเครื่องมือบอกว่าเบราว์เซอร์ของฉันไม่รองรับ?

เครื่องมือนี้ใช้ Compression Streams API ของเบราว์เซอร์ (CompressionStream/DecompressionStream) ซึ่งไม่มีในเบราว์เซอร์หรือเวอร์ชันเก่าบางตัว — ไม่มีข้อมูลใดถูกส่งไปเซิร์ฟเวอร์ แต่หากไม่รองรับเครื่องมือก็จะทำงานไม่ได้

ทำไมการคลายข้อมูลบางครั้งจึงเกิดข้อผิดพลาด "invalid header"?

สาเหตุที่พบบ่อยที่สุดคือรูปแบบสับสนกัน: ข้อมูลถูกบีบอัดเป็น Deflate แบบ "ดิบ" ที่ไม่มีส่วนหัว แต่ถูกคลายในโหมด Gzip (ซึ่งคาดหวังส่วนหัวและ CRC-32 ของตัวเอง) หรือในทางกลับกัน ลองสลับรูปแบบในตัวเลือกของเครื่องมือดู

การบีบอัดทำให้ขนาดสุดท้ายเล็กลงเสมอหรือไม่?

ไม่เสมอไป สำหรับสตริงที่สั้นมาก ค่าใช้จ่ายของส่วนหัว Gzip และการขยายขนาดจาก Base64 อาจมากกว่าประโยชน์จากการบีบอัด วิธีนี้เหมาะกับข้อมูลข้อความที่มีขนาดใหญ่พอและบีบอัดได้ดีเท่านั้น

บทความ: การเข้ารหัส

Base64: การเข้ารหัสมีไว้ทำไมและทำงานอย่างไร

Base64 เปลี่ยนข้อมูลไบนารีเป็นข้อความ ASCII อย่างไร และเมื่อไหร่ที่จำเป็นต้องใช้จริง ๆ

Base32: ต่างจาก Base64 อย่างไรและสะดวกกว่าเมื่อไหร่

ตัวอักษร Base32 ที่ไม่แยกตัวพิมพ์เล็กใหญ่ และกรณีที่สะดวกกว่า Base64

URL Encode/Decode: percent-encoding ในลิงก์

อักขระพิเศษในที่อยู่และพารามิเตอร์กลายเป็นลำดับ %XX ได้อย่างไร

HTML Entities: วิธีแสดงอักขระพิเศษอย่างปลอดภัย

ทำไมต้อง escape อักขระ < > & และสิ่งนี้ป้องกันไม่ให้มาร์กอัปเสียหายได้อย่างไร

JWT: โครงสร้างโทเคนและความหมายของการ "ถอดรหัส" JWT

header, payload และ signature ของ JWT และทำไมการถอดรหัสจึงไม่เหมือนกับการตรวจสอบลายเซ็น

Unicode Escape: ลำดับ \uXXXX หมายความว่าอย่างไร

ลำดับแบบ A ใน JSON และสตริง JS มาจากไหน และหมายความว่าอย่างไร

ROT13 และรหัสซีซาร์: การแทนที่อักขระแบบง่าย

ทำไมการเลื่อน 13 ตัวอักษรทำให้ ROT13 ผกผันในตัวเอง และทำไมยังมีการใช้อยู่ในปัจจุบัน

Punycode: โดเมนสากลทำงานใน DNS อย่างไร

โดเมนที่มีอักขระไม่ใช่ละตินกลายเป็นรูปแบบ ASCII ที่มีคำนำหน้า xn-- ได้อย่างไร

รหัสมอร์ส: ข้อความกลายเป็นจุดและขีดได้อย่างไร

หลักการเข้ารหัสตัวอักษรเป็นจุดและขีด และรหัสมอร์สยังใช้ที่ไหนอยู่บ้างในปัจจุบัน

Data URI: เมื่อไหร่ควรฝังรูปภาพลงในโค้ดโดยตรง

Data URI ฝังเนื้อหาของไฟล์ลงใน HTML หรือ CSS โดยตรงอย่างไร และเมื่อไหร่ที่คุ้มค่า

XML Entities: การ escape อักขระในเอกสาร XML

เอนทิตี XML ที่จำเป็นห้าตัว ซึ่งหากไม่มีเอกสารจะเสียหายขณะแยกวิเคราะห์