UTILS.
100% trong trình duyệt
🗜️

Nén & Giải nén Gzip / Zlib / Deflate

Nén hoặc giải nén văn bản với các định dạng gzip, zlib (deflate) hoặc DEFLATE thô gốc trong trình duyệt, kèm đầu ra base64/hex và tỷ lệ nén.

Nhập dữ liệu ở trên để nén hoặc giải nén.

Về công cụ này

Công cụ Gzip / Zlib / Deflate nén và giải nén dữ liệu hoàn toàn trong trình duyệt của bạn bằng các API gốc CompressionStream và DecompressionStream. Chọn định dạng container — gzip (định dạng .gz với các byte ma thuật 0x1F 0x8B của nó), zlib/deflate (dữ liệu DEFLATE được bọc trong một header zlib), hoặc deflate-raw (DEFLATE trần không có header) — và một hướng. Việc nén lấy văn bản UTF-8 của bạn và trả về các byte đã nén mã hóa dưới dạng base64 hoặc hex; việc giải nén lấy base64 hoặc hex và trả về văn bản gốc.

Vì nó dùng nén luồng tích hợp sẵn của trình duyệt, không có gì được tải lên và không có thư viện bên ngoài nào được nạp — dữ liệu của bạn ở lại trên thiết bị của bạn. Ba định dạng không thể thay thế cho nhau: gzip và zlib thêm các header và checksum khác nhau (CRC-32 cho gzip, Adler-32 cho zlib) quanh cùng một tải DEFLATE, còn deflate-raw bỏ cả hai, nên bạn phải giải nén bằng đúng định dạng bạn đã nén. Sau khi nén, công cụ báo cáo kích thước gốc, kích thước đã nén, và tỷ lệ nén theo phần trăm (1 − nén / gốc), là mức đầu ra nhỏ đi bao nhiêu.

Văn bản lặp lại nhiều nén cực kỳ ấn tượng; đầu vào ngắn hoặc đã-được-nén có thể thực sự tăng lên vì chi phí phụ trội của header và checksum, điều này là bình thường. Nếu trình duyệt của bạn không cung cấp CompressionStream, công cụ sẽ báo như vậy thay vì tạo ra đầu ra sai. Lưu ý rằng API gốc dùng một mức nén mặc định cố định, nên không có bộ chọn mức. Sao chép kết quả chỉ với một cú nhấp.

Câu hỏi thường gặp

Sự khác biệt giữa gzip, zlib và deflate thô là gì?
Cả ba đều dùng thuật toán DEFLATE. gzip bọc nó với một header 10 byte, các byte ma thuật 0x1F 0x8B, và một CRC-32; zlib (deflate) bọc nó với một header ngắn và một checksum Adler-32; deflate-raw không có header hay checksum. Giải nén bằng đúng định dạng bạn đã dùng để nén.
Việc giải nén mong đợi đầu vào gì?
Dán dữ liệu đã nén dưới dạng base64 hoặc hex (khớp với bộ chọn mã-hóa-đầu-ra). Công cụ giải mã nó thành byte và giải nén (inflate) với định dạng đã chọn. Nếu các byte bị cắt cụt hoặc sai định dạng, nó báo rằng dữ liệu không thể giải nén được.
Tại sao văn bản của tôi lớn hơn sau khi nén?
gzip và zlib thêm các byte header và checksum, và DEFLATE cần đủ sự lặp lại để tìm ra mức tiết kiệm. Với đầu vào rất ngắn hoặc đã-ngẫu-nhiên/đã-nén, chi phí phụ trội đó lớn hơn bất kỳ lợi ích nào, nên đầu ra có thể lớn hơn — điều đó là bình thường.
Tôi có thể chọn mức nén không?
Không. API gốc CompressionStream không cung cấp tham số mức, nên một mức mặc định cố định được dùng. Đầu ra vẫn là một luồng gzip/zlib/deflate hoàn toàn hợp lệ mà bất kỳ công cụ tiêu chuẩn nào (gunzip, zlib, pako) đều có thể giải nén.

Công cụ khác