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

相关推荐
Liora_Yvonne3 小时前
为什么你写了3年前端还是搭不好一个项目
前端·架构
snow@li3 小时前
Java:后端项目会有一个类似前端node_modules的目录吗 / jar包在本地仓库 ~/.m2/repository 中按版本共存
java·开发语言·前端
weedsfly3 小时前
单例模式在前端中的正确打开方式
前端·javascript·面试
PedroQue993 小时前
uni-router新推useUniEventChannel,彻底解决页面通信难题
前端·uni-app
IT_陈寒3 小时前
Vite冷启动快?我遇到了个奇怪的依赖问题
前端·人工智能·后端
2603_955279703 小时前
通过 brew upgrade cmake 升级到最新版本
前端
FREEDOM_X3 小时前
Linux 进程间通讯(IPC)——总结
linux·c语言·前端·嵌入式硬件·struts
WWBQU3 小时前
前端day06
前端
岁月宁静3 小时前
DeepSeek Harness 团队 招聘 :JD反推:新手如何系统掌握AI Agent开发技术?
前端·人工智能·后端
小则又沐风a4 小时前
深入理解文件系统(二)
java·服务器·前端