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