function decodeBase64(base64Str) { try { // 第一步:先 URL 解码(解决 %2B、%3D 等问题) const urlDecoded = decodeURIComponent(base64Str); // 第二步:处理 Base64 字符(替换 URL 安全字符) let safeBase64 = urlDecoded .replace(/-/g, "+") .replace(/_/g, "/") .replace(/\s/g, ""); // 补全等号 const pad = safeBase64.length % 4; safeBase64 = safeBase64.padEnd( safeBase64.length + (pad ? 4 - pad : 0), "=" ); // 第三步:使用微信小程序提供的 base64 解码函数 const arrayBuffer = wx.base64ToArrayBuffer(safeBase64); const bytes = new Uint8Array(arrayBuffer); // 第四步:手动 UTF-8 解码 let utf8Str = ""; let i = 0; while (i < bytes.length) { const byte = bytes[i]; if (byte < 0x80) { utf8Str += String.fromCharCode(byte); i++; } else if (byte < 0xe0) { utf8Str += String.fromCharCode( ((byte & 0x1f) << 6) | (bytes[i + 1] & 0x3f) ); i += 2; } else if (byte < 0xf0) { utf8Str += String.fromCharCode( ((byte & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f) ); i += 3; } else { // 四字节字符跳过 i += 4; } } return utf8Str; } catch (e) { console.error("Base64解码失败:", e); return "

内容解析错误

"; } } module.exports = { decodeBase64 };