最近在搞一个插件的需求,需要进行(伪)加密处理,第一时间想到的就是base64编码,因为比较常见,且自己比较熟悉,开发起来也快,同时又兼容前后端。
这也是第一个由后端来编码,前端来解码的需求,所以还是踩到了不少坑,就比如标题所说的会导致中文乱码的问题。
首先,我知道前端atob方法解码中文会出现问题,所以当时会借助一个现成的解决方法,但是因为考虑到插件的包大小,当时就没有过多的去考虑用包了。
其次,因为我一直以为后端编码的那段代码中没有中文的,所以就一直怀疑是PHP中的base64_encode编码跟前端的不一致导致的。
最后就是定位到就是前端的atob方法不能解码中文的原因。
所以下面就给大家分享下,可以有效的解决的方面。
let encode=window.btoa(unescape(encodeURIComponent('中文a'))); console.log(encode);// 'JUU0JUI4JUFEJUU2JTk2JTg3YQ==' let decode=decodeURIComponent(escape(window.atob(encode))); console.log(decode);// '中文a'