JavaScript 将字符串编码/解码为Base64
为了在JavaScript中进行字符串编码/解码操作,我们使用JavaScript提供的内建函数。
btoa() 方法
该方法将字符串进行Base64编码,并使用“A-Z”、“a-z”、“0-9”、“+”、“/”和“=”字符对提供的字符串进行编码。
语法:
window.btoa( String )
参数(String): 此参数是必需的。它指定要编码的字符串。
atob() 方法
此方法用于解码由btoa()方法编码的base-64编码的字符串。
语法:
window.atob( String )
参数(String): 该参数是必需的。它指定了已经通过btoa()方法进行编码的字符串。
以下是一些示例。
示例1: 此示例通过 btoa() 函数对字符串 “This is GeeksForGeeks” 进行编码。
function encodeStr() {
console.log(btoa(str));
}
const str = "This is GeeksForGeeks";
encodeStr();
输出
VGhpcyBpcyBHZWVrc0ZvckdlZWtz
示例2: 这个示例解码了字符串 “VGhpcyBpcyBHZWVrc0ZvckdlZWtz” 使用 btoa() 函数编码,辅助的是 atob() 函数。
function decodeStr() {
console.log(atob(str));
}
const str = "VGhpcyBpcyBHZWVrc0ZvckdlZWtz";
decodeStr();
输出
This is GeeksForGeeks
使用 Cross-Browser Method 作为一个JavaScript库,在任何浏览器中对字符串进行编码/解码。
示例3: 此示例通过创建一个 Base64 对象对字符串 “This is GeeksForGeeks” 进行编码。
let Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
"abcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function (e) {
let t = "";
let n, r, i, s, o, u, a;
let f = 0;
e = Base64._utf8_encode(e);
while (f < e.length) {
n = e.charCodeAt(f++);
r = e.charCodeAt(f++);
i = e.charCodeAt(f++);
s = n >> 2;
o = (n & 3) << 4 | r >> 4;
u = (r & 15) << 2 | i >> 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t +
this._keyStr.charAt(s) +
this._keyStr.charAt(o) +
this._keyStr.charAt(u) +
this._keyStr.charAt(a)
}
return t
},
decode: function (e) {
let t = "";
let n, r, i;
let s, o, u, a;
let f = 0;
e = e.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (f < e.length) {
s = this._keyStr.indexOf(e.charAt(f++));
o = this._keyStr.indexOf(e.charAt(f++));
u = this._keyStr.indexOf(e.charAt(f++));
a = this._keyStr.indexOf(e.charAt(f++));
n = s << 2 | o >> 4;
r = (o & 15) << 4 | u >> 2;
i = (u & 3) << 6 | a;
t = t + String.fromCharCode(n);
if (u != 64) {
t = t + String.fromCharCode(r)
}
if (a != 64) {
t = t + String.fromCharCode(i)
}
}
t = Base64._utf8_decode(t);
return t
},
_utf8_encode: function (e) {
e = e.replace(/\r\n/g, "\n");
let t = "";
for (let n = 0; n < e.length; n++) {
let r = e.charCodeAt(n);
if (r < 128) {
t += String.fromCharCode(r)
} else if (r > 127 && r < 2048) {
t +=
String.fromCharCode(r >> 6 | 192);
t +=
String.fromCharCode(r & 63 | 128)
} else {
t +=
String.fromCharCode(r >> 12 | 224);
t +=
String.fromCharCode(r >> 6 & 63 | 128);
t +=
String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function (e) {
let t = "";
let n = 0;
let r = c1 = c2 = 0;
while (n < e.length) {
r = e.charCodeAt(n);
if (r < 128) {
t += String.fromCharCode(r);
n++
} else if (r > 191 && r < 224) {
c2 = e.charCodeAt(n + 1);
t += String.fromCharCode(
(r & 31) << 6 | c2 & 63);
n += 2
} else {
c2 = e.charCodeAt(n + 1);
c3 = e.charCodeAt(n + 2);
t += String.fromCharCode(
(r & 15) << 12 | (c2 & 63)
<< 6 | c3 & 63);
n += 3
}
}
return t
}
}
function encodeStr() {
console.log(Base64.encode(str));
}
const str = "This is GeeksForGeeks";
encodeStr();
输出
VGhpcyBpcyBHZWVrc0ZvckdlZWtz
示例4: 这个示例通过创建一个 Base64 对象来编码字符串 “VGhpcyBpcyBHZWVrc0ZvckdlZWtz” 。
let Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef" +
"ghijklmnopqrstuvwxyz0123456789+/=",
encode: function (e) {
let t = "";
let n, r, i, s, o, u, a;
let f = 0;
e = Base64._utf8_encode(e);
while (f < e.length) {
n = e.charCodeAt(f++);
r = e.charCodeAt(f++);
i = e.charCodeAt(f++);
s = n >> 2;
o = (n & 3) << 4 | r >> 4;
u = (r & 15) << 2 | i >> 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t +
this._keyStr.charAt(s) +
this._keyStr.charAt(o) +
this._keyStr.charAt(u) +
this._keyStr.charAt(a)
}
return t
},
decode: function (e) {
let t = "";
let n, r, i;
let s, o, u, a;
let f = 0;
e = e.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (f < e.length) {
s = this._keyStr.indexOf(e.charAt(f++));
o = this._keyStr.indexOf(e.charAt(f++));
u = this._keyStr.indexOf(e.charAt(f++));
a = this._keyStr.indexOf(e.charAt(f++));
n = s << 2 | o >> 4;
r = (o & 15) << 4 | u >> 2;
i = (u & 3) << 6 | a;
t = t + String.fromCharCode(n);
if (u != 64) {
t = t + String.fromCharCode(r)
}
if (a != 64) {
t = t + String.fromCharCode(i)
}
}
t = Base64._utf8_decode(t);
return t
},
_utf8_encode: function (e) {
e = e.replace(/\r\n/g, "\n");
let t = "";
for (let n = 0; n < e.length; n++) {
let r = e.charCodeAt(n);
if (r < 128) {
t += String.fromCharCode(r)
} else if (r > 127 && r < 2048) {
t +=
String.fromCharCode(r >> 6 | 192);
t +=
String.fromCharCode(r & 63 | 128)
} else {
t +=
String.fromCharCode(r >> 12 | 224);
t +=
String.fromCharCode(r >> 6 & 63 | 128);
t +=
String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function (e) {
let t = "";
let n = 0;
let r = c1 = c2 = 0;
while (n < e.length) {
r = e.charCodeAt(n);
if (r < 128) {
t += String.fromCharCode(r);
n++
} else if (r > 191 && r < 224) {
c2 = e.charCodeAt(n + 1);
t +=
String.fromCharCode(
(r & 31) << 6 | c2 & 63);
n += 2
} else {
c2 = e.charCodeAt(n + 1);
c3 = e.charCodeAt(n + 2);
t +=
String.fromCharCode(
(r & 15) << 12 |
(c2 & 63) << 6 | c3 & 63);
n += 3
}
}
return t
}
}
function decodeStr() {
console.log(Base64.decode(str));
}
const str = "VGhpcyBpcyBHZWVrc0ZvckdlZWtz";
decodeStr();
输出
This is GeeksForGeeks
极客教程