使用JavaScript解压GZIP字符串时pako报incorrect header check如何解决
错误原因
你拿到的压缩字符串是先经过GZIP压缩、再经过Base64编码得到的文本结果,你直接使用TextEncoder.encode处理,只是把Base64文本的每个字符转成了UTF-8字节,并没有得到真正的GZIP二进制流,因此pako无法识别到合法的GZIP头,抛出incorrect header check错误。
正确处理步骤
需要先把Base64编码的字符串解码为原始的GZIP二进制数据,再传给pako解压。
浏览器环境代码示例
import { ungzip } from 'pako'; const base64GzipStr = "H4sIAAAAAAAA//NIzcnJVyguSUzOzi9LLUrLyS/XUSjJSMzLLlZIyy9SSMwpT6wsVshIzSnIzEtXBACs78K6LwAAAA=="; // 1. 解码Base64得到二进制字符串 const binaryStr = atob(base64GzipStr); // 2. 转成pako可识别的Uint8Array格式 const gzipData = Uint8Array.from(binaryStr, c => c.charCodeAt(0)); // 3. 解压,配置to: 'string'直接返回字符串结果 const result = ungzip(gzipData, { to: 'string' }); console.log('解压结果:', result);
Node.js环境代码示例
const { ungzip } = require('pako'); const base64GzipStr = "H4sIAAAAAAAA//NIzcnJVyguSUzOzi9LLUrLyS/XUSjJSMzLLlZIyy9SSMwpT6wsVshIzSnIzEtXBACs78K6LwAAAA=="; // 直接用Buffer解码Base64 const gzipData = Buffer.from(base64GzipStr, 'base64'); const result = ungzip(gzipData, { to: 'string' }); console.log('解压结果:', result);
运行上述代码后可以得到解压后的内容:Hello, this is a test content。
内容的提问来源于stack exchange,提问作者petur
相关产品推荐
相关产品推荐

