从Google日历Event URL解码原始Event ID失败,求解决方法
解决方案
你解码失败的核心原因是:原编码逻辑是把原始事件ID的前缀部分和日历ID的片段用空格拼接后做Base64编码,你目前只完成了Base64的逆解码,没把拼接的两部分拆分出来,所以得到的是拼接后的完整字符串。
正确的解码步骤需要在逆解码后,将结果按空格分割,取第一部分就是你要的原始事件ID。修改后的完整代码如下:
var eventIdEncoded = eventUrl.split("/").pop(); // 提取URL中的编码部分 try { // 还原URL安全的Base64编码格式 eventIdEncoded = eventIdEncoded.replace(/-/g, '+').replace(/_/g, '/'); // 补全Base64要求的填充位(按4的倍数计算,而非2的倍数) var paddingNeeded = (4 - eventIdEncoded.length % 4) % 4; eventIdEncoded += "====".substring(0, paddingNeeded); var eventIdDecoded = Utilities.base64Decode(eventIdEncoded); // 转成字符串后按空格拆分,取第一部分即为原始事件ID var decodedString = Utilities.newBlob(eventIdDecoded).getDataAsString(); var originalEventId = decodedString.split(" ")[0]; Logger.log("原始Event ID: " + originalEventId); } catch (e) { Logger.log("解码失败: " + e.message); }
关键修正说明:
- 修正了Base64填充位的计算逻辑:Base64要求长度为4的倍数,原代码按2的倍数补位是错误的,改成按
(4 - 编码长度%4) %4计算需要补充的等号数量 - 新增拆分逻辑:解码后的字符串是
[原始事件ID前缀] [日历ID片段]的格式,按空格拆分后取第一个元素就是目标ID
内容的提问来源于stack exchange,提问作者LionelHutz
相关产品推荐
相关产品推荐

