我最早使用的是atob和btoa这两个函数,但是会出现报错。

直接使用封装好的方法:

/**

* 编码base64

*/

function Encode64(str) {

return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,

function toSolidBytes(match, p1) {

return String.fromCharCode('0x' + p1);

}));

}

/**

* 解码base64

*/

function Decode64(str) {

return decodeURIComponent(atob(str).split('').map(function (c) {

return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);

}).join(''));

}

btoa 和 atob 是window对象的两个函数,其中:

btoa :是binary to ascii,用于将binary的数据用ascii码表示,即Base64的编码过程 atob:是ascii to binary,用于将ascii码解析成binary数据,即Base64的解码过程。

binary to ascii,用于将ascii字符串或二进制数据转换成一个base64编码过的字符串表示,即Base64的编码过程,常用于编码字符串

var str = "hello world";

var demo = btoa(str);

console.log(demo);// aGVsbG8gd29ybGQ=

btoa不能编辑Unicode字符 

var str = "好好学习";

var demo = btoa(str);

console.log(demo);

上面操作,此时会报错,翻译过来就是:无法在“Window”上执行“btoa”:要编码的字符串包含超出 Latin1 范围的字符 

4、Unicode字符编码 刚才上面的例子中我们想对Unicode字符编码进行编码,直接使用btoa不行的,所以我们使用encodeURIComponent和decodeURIComponent方法。

因为 btoa 仅支持 ASCII 字符序列,如所以我们要先使用 encodeURIComponent ,将中文字符编码转变成ASCII字符序列

编码时,先用encodeURIComponent对字符串进行编码,再用btoa进行Base64编码; 解码时,先用atob对Base64编码的串进行解码,再用decodeURIComponent对字符串进行解码

注意:

编码的过程:Unicode字符 -------> 先encodeURI -------> 再btoa编码 解码的过程:先atob解码 -------> 再decodeURI -------> Unicode字符  

var str = "好好学习";

var demo = btoa(encodeURIComponent(str));

console.log(demo);//JUU1JUE1JUJEJUU1JUE1JUJEJUU1JUFEJUE2JUU0JUI5JUEw

var demo = 'JUU1JUE1JUJEJUU1JUE1JUJEJUU1JUFEJUE2JUU0JUI5JUEw'

var str1 = decodeURIComponent(atob(demo))

console.log(str1)//好好学习

 不过虽然到达了曲线救国的目的,但是由于 encodeURIComponent 和 decodeURIComponent 已经达到了转义控制字符的目的,使用 atob 和 btoa 感觉是多此一举。

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: