前端base-64 编码解码

javascript 复制代码
let arr = ['W29iamVjdCBPYmplY3Rd']
for (var key in arr) {
   var newObj = {
      src: arr[key],
      info: JSON.parse(decodeURIComponent(escape(window.atob(arr[key].replace(/-/g, "+").replace(/_/g, "/"))))).name 
   }
}

展示正常:

javascript 复制代码
JSON.parse(decodeURIComponent(escape(window.atob(arr[key].replace(/-/g, "+").replace(/_/g, "/"))))).name

偶发乱码:

javascript 复制代码
JSON.parse(decodeURIComponent(encodeURIComponent(window.atob(arr[key].replace(/-/g, "+").replace(/_/g, "/"))))).name

偶发原因:

当使用 atob() 解码后,JavaScript 不会把它当作 UTF-8 字符串,而当作每个字符代表一个字节的 Latin1(ISO-8859-1)字符串。

encodeURIComponent 会按 UTF-16 → UTF-8 进行双重编码,导致decodeURIComponent解码偶发失败。

escape 保留了原始字节,decodeURIComponent按 UTF-8 解码。

相关推荐
布鲁飞丝2 小时前
从零实现富文本编辑器#-浏览器选区与编辑器选区模型同步
java·前端·编辑器
写不来代码的草莓熊2 小时前
Cesium 地图交互绘制圆形、多边形
前端·javascript·地图
weixin_427771612 小时前
前端版本检测
前端
禅思院3 小时前
流式 Markdown 渲染完全指南【引子】
前端·架构·前端框架
JackSparrow4143 小时前
前端安全之JS混淆+请求加密+请求签名以提升爬虫难度
前端·javascript·后端·爬虫·python·安全
IMPYLH3 小时前
HTML 的 <em> 元素
java·前端·html
看昭奚恤哭3 小时前
基于 RuoYi-Vue-Pro 定制了一个后台管理系统 magic-admin , 开源出来!
前端·vue.js·开源
名为沙丁鱼的猫7295 小时前
【审计日志组件实践复盘】前端工程化 + 后端DDD架构(AOP切面拦截日志) + MBG
前端·架构
xqqxqxxq6 小时前
AI智能旅游规划系统 - 前端技术笔记
前端·笔记·旅游
陈随易12 小时前
bm2,MoonBit实现的pm2替代品
前端·后端·程序员