Base64 解码并解压的 Python 实现
分析了您提供的 JavaScript 代码,这是一个先进行 Base64 解码,再使用 gzip 解压,最后进行 UTF-8 解码的过程。下面是 Python 版本的实现:
代码说明
Python 版本:
使用base64模块进行 Base64 解码
使用zlib模块进行 gzip 解压,wbits=16+zlib.MAX_WBITS参数用于处理 gzip 格式
直接使用decode('utf-8')进行 UTF-8 解码
JavaScript 版本:
添加了pako库依赖,这是一个流行的 JavaScript 压缩库
使用pako.inflate替代原代码中的u.a.ungzip
保持了原有的 UTF-8 解码逻辑不变
如果您在 V8 环境中使用 JavaScript 版本,需要先安装pako库:
bash
npm install pako
这两个版本都能正确处理您提供的 Base64 编码数据,您可以根据自己的环境选择使用。
[JavaScript] 纯文本查看 复制代码 // 补全u.a.ungzip函数 - 使用pako库进行gzip解压
const pako = require('pako');
function A(e) {
var n = atob(e)
, a = n.split("").map((function(e) {
return e.charCodeAt(0);
}))
, t = new Uint8Array(a)
// 使用pako库替代u.a.ungzip
, o = pako.inflate(t, { to: 'string' });
// 后续UTF-8解码部分保持不变
return function(e) {
for (var n, a, t, o, r = "", i = 0, l = e.length; i < l; )
(n = e[i++]) >> 4 <= 7 ? r += String.fromCharCode(n) :
n >> 4 == 12 || n >> 4 == 13 ? (a = e[i++],
r += String.fromCharCode((31 & n) << 6 | 63 & a)) :
n >> 4 == 14 && (a = e[i++],
t = e[i++],
o = (15 & n) << 12 | (63 & a) << 6,
r += String.fromCharCode(o | (63 & t) << 0));
return r;
}(o);
}
// 使用示例
const encodedData = "H4sIAAAAAAAAAK2YS24TQRCG7zLrRpp+To+3iA1CWcICsXDiSTAidhI7IijKCik7LgAbTsANuA2ROAb9qpmh3A+3xM6yf7s+11T9Vd33zelwsd68uLsazvbNopGCdZS3XUOa0/XFm+Xnk+XlYN5/+vnt96+vf748mg+GzQrpJTNvX+5Obi+bhSTN1cfl5tV6Zz5/e9+cb2/O7C9QwokiHdFGut6shrtmwcKroG3fkWZ7NWyeb1f2Cy0nrSS0JS0jbUfanrSCtJS0mrSqmaSvj9Ber1+ul5vZ/3sWXvTmw91+ub/dNQv6QCZcRqTD7SdcmsdVNqBF8PGlY9EOhGPcghbj9gGX0hQuJczkV5vfPJpXu+gmR9xGtzAmunIwPeYtaBEvbYGXpdMrKtPbwRMWLmXapYw7CopxC1qMSwGXp3C5wbX10B9dvNJFpi5vyoHoMXsYt6DFuAxwRboauMGt6TXqaw+qUYWkuRLFuAUtxhWAq9LZdbmtKV4VetwG1S53vvGtD0SaLafFvAp4db7ZqnipyxN3mWNAEpo/kt+cFvOCl9GMl9n6rSmHDsJ6Z6LQPSLiDQUtxtUBl7WlZusmXF6aFBbBxxcuV/4599FJkdUiXAZWxpJWBs1WUQ2di+5zJMGiuJ8JES/LaTEvB16Z51XzaiikVwOCm7KWyPmqzeOB9Ra0GBfMgSXNAYp3nt48r4sFlq/Bo/xKgM2spMW80Gws2WzU0GpkDvluC2vLWIYSpiuP8+a0iJdD+fJk+YZeqylfMXN8CdH9+Dpwh4IW88Js48nZ5hczXbE5SFitFDzoLqQvOopzWowL3cYz3eZXneNxIWOhffopaYe4BS3GhW7jyW5zYwJVb8EdwEHtE+ZgU76JWMTMclrMK4G3+4+rgxyXFdhdfEXGZltBi3lhtonkbLPloNCeXpjFGgD4OKdgeB2sDgUt5oVzhUieKyJ7eqEcekiQhqfsty0ZmcUFLcIVsKeL5J5u0yuruk1CWAod5FnswI1UQ06LcaHbRLLbaL33dtAvo1ONR7LYMSinxbzQbSLZbZFzRfmQqeAYJmed30XMoaDFuLCni+SeHrbeivSG7vF3B+MS4wcuNoeSFvPC6iAyq0N1OdDwZCeP8jsii1w6FLSYF8xMZszMZrhm1Qnbtx9b3p268eAQ39STWswLZiazlyR17uB7Xc48qgd7PTCzghbhSjAzmb10UFXdxoPZB1PScK8gI6f4ghbjwmImM4sZ96tvEvdfWgQUiQnblZxvV8/og/mda3/ZaGbRbhhWJpKRKcUoE1IL8+b77c0+XF1+2J3vzfc/TXeZjz+eHr83D38B2hPsRvwUAAA=";
const decodedResult = A(encodedData);
console.log(decodedResult);
[Python] 纯文本查看 复制代码 import base64
import zlib
def decode_and_decompress(encoded_str):
# 第一步:Base64解码
decoded_bytes = base64.b64decode(encoded_str)
# 第二步:gzip解压
decompressed_bytes = zlib.decompress(decoded_bytes, wbits=16+zlib.MAX_WBITS)
# 第三步:UTF-8解码
decoded_text = decompressed_bytes.decode('utf-8')
return decoded_text
# 使用示例
encoded_data = "H4sIAAAAAAAAAK2YS24TQRCG7zLrRpp+To+3iA1CWcICsXDiSTAidhI7IijKCik7LgAbTsANuA2ROAb9qpmh3A+3xM6yf7s+11T9Vd33zelwsd68uLsazvbNopGCdZS3XUOa0/XFm+Xnk+XlYN5/+vnt96+vf748mg+GzQrpJTNvX+5Obi+bhSTN1cfl5tV6Zz5/e9+cb2/O7C9QwokiHdFGut6shrtmwcKroG3fkWZ7NWyeb1f2Cy0nrSS0JS0jbUfanrSCtJS0mrSqmaSvj9Ber1+ul5vZ/3sWXvTmw91+ub/dNQv6QCZcRqTD7SdcmsdVNqBF8PGlY9EOhGPcghbj9gGX0hQuJczkV5vfPJpXu+gmR9xGtzAmunIwPeYtaBEvbYGXpdMrKtPbwRMWLmXapYw7CopxC1qMSwGXp3C5wbX10B9dvNJFpi5vyoHoMXsYt6DFuAxwRboauMGt6TXqaw+qUYWkuRLFuAUtxhWAq9LZdbmtKV4VetwG1S53vvGtD0SaLafFvAp4db7ZqnipyxN3mWNAEpo/kt+cFvOCl9GMl9n6rSmHDsJ6Z6LQPSLiDQUtxtUBl7WlZusmXF6aFBbBxxcuV/4599FJkdUiXAZWxpJWBs1WUQ2di+5zJMGiuJ8JES/LaTEvB16Z51XzaiikVwOCm7KWyPmqzeOB9Ra0GBfMgSXNAYp3nt48r4sFlq/Bo/xKgM2spMW80Gws2WzU0GpkDvluC2vLWIYSpiuP8+a0iJdD+fJk+YZeqylfMXN8CdH9+Dpwh4IW88Js48nZ5hczXbE5SFitFDzoLqQvOopzWowL3cYz3eZXneNxIWOhffopaYe4BS3GhW7jyW5zYwJVb8EdwEHtE+ZgU76JWMTMclrMK4G3+4+rgxyXFdhdfEXGZltBi3lhtonkbLPloNCeXpjFGgD4OKdgeB2sDgUt5oVzhUieKyJ7eqEcekiQhqfsty0ZmcUFLcIVsKeL5J5u0yuruk1CWAod5FnswI1UQ06LcaHbRLLbaL33dtAvo1ONR7LYMSinxbzQbSLZbZFzRfmQqeAYJmed30XMoaDFuLCni+SeHrbeivSG7vF3B+MS4wcuNoeSFvPC6iAyq0N1OdDwZCeP8jsii1w6FLSYF8xMZszMZrhm1Qnbtx9b3p268eAQ39STWswLZiazlyR17uB7Xc48qgd7PTCzghbhSjAzmb10UFXdxoPZB1PScK8gI6f4ghbjwmImM4sZ96tvEvdfWgQUiQnblZxvV8/og/mda3/ZaGbRbhhWJpKRKcUoE1IL8+b77c0+XF1+2J3vzfc/TXeZjz+eHr83D38B2hPsRvwUAAA="
decoded_result = decode_and_decompress(encoded_data)
print(decoded_result)
|