前端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 解码。

相关推荐
计算机魔术师4 分钟前
半年前说不缺钱,半年后150亿美元超募
前端
用户5708462574405 分钟前
自动化发布器里最贵的 Bug:返回成功,但什么都没发生
前端
爱吃馒头不吃辣10 分钟前
加一道题,改一天代码:题库即数据的降维打击
前端·架构
aiks_yuan14 分钟前
Requestly规则使用技巧:前端联调、接口Mock与网络请求调试实战
前端
程序员老赵17 分钟前
Docker 部署 MaxKB:轻松搭建企业级智能体平台
前端·docker·agent
码林鼠24 分钟前
flutter状态管理入门教程-Riverpod
开发语言·javascript·flutter
踩蚂蚁31 分钟前
输入关键词到离线模型:从 Wake Word 到多关键词 KWS 的一条工程链路
前端
互影派37 分钟前
分享:Cocos 互动影游一套代码双端分发(Web H5 + Windows/Steam)实践
javascript
Amos_Web1 小时前
Markdonw语法
开发语言·前端·javascript