码值
|
字符
|
码值
|
字符
|
码值
|
字符
|
码值
|
字符
|
0
|
A
|
16
|
Q
|
32
|
g
|
48
|
w
|
1
|
B
|
17
|
R
|
33
|
h
|
49
|
x
|
2
|
C
|
18
|
S
|
34
|
i
|
50
|
y
|
3
|
D
|
19
|
T
|
35
|
j
|
51
|
z
|
4
|
E
|
20
|
U
|
36
|
k
|
52
|
0
|
5
|
F
|
21
|
V
|
37
|
l
|
53
|
1
|
6
|
G
|
22
|
W
|
38
|
m
|
54
|
2
|
7
|
H
|
23
|
X
|
39
|
n
|
55
|
3
|
8
|
I
|
24
|
Y
|
40
|
o
|
56
|
4
|
9
|
J
|
25
|
Z
|
41
|
p
|
57
|
5
|
10
|
K
|
26
|
a
|
42
|
q
|
58
|
6
|
11
|
L
|
27
|
b
|
43
|
r
|
59
|
7
|
12
|
M
|
28
|
c
|
44
|
s
|
60
|
8
|
13
|
N
|
29
|
d
|
45
|
t
|
61
|
9
|
14
|
O
|
30
|
e
|
46
|
u
|
62
|
+
|
15
|
P
|
31
|
f
|
47
|
v
|
63
|
/
|
1 // Create Base64 Objectvar
2 Base64 = {
3 _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
4 encode: function (e) {
5 var t = "";
6 var n, r, i, s, o, u, a;
7 var f = 0;
8 e = Base64._utf8_encode(e);
9 while (f < e.length) {
10 n = e.charCodeAt(f++);
11 r = e.charCodeAt(f++);
12 i = e.charCodeAt(f++);
13 s = n >> 2;
14 o = (n & 3) << 4 | r >> 4;
15 u = (r & 15) << 2 | i >> 6;
16 a = i & 63;
17 if (isNaN(r)) {
18 u = a = 64
19 } else if (isNaN(i)) {
20 a = 64
21 }
22 t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
23 }
24 return t
25 },
26 decode: function (e) {
27 var t = "";
28 var n, r, i;
29 var s, o, u, a;
30 var f = 0;
31 e = e.replace(/[^A-Za-z0-9+/=]/g, "");
32 while (f < e.length) {
33 s = this._keyStr.indexOf(e.charAt(f++));
34 o = this._keyStr.indexOf(e.charAt(f++));
35 u = this._keyStr.indexOf(e.charAt(f++));
36 a = this._keyStr.indexOf(e.charAt(f++));
37 n = s << 2 | o >> 4;
38 r = (o & 15) << 4 | u >> 2;
39 i = (u & 3) << 6 | a;
40 t = t + String.fromCharCode(n);
41 if (u != 64) {
42 t = t + String.fromCharCode(r)
43 }
44 if (a != 64) {
45 t = t + String.fromCharCode(i)
46 }
47 }
48 t = Base64._utf8_decode(t);
49 return t
50 }, _utf8_encode: function (e) {
51 e = e.replace(/rn/g, "n");
52 var t = "";
53 for (var n = 0; n < e.length; n++) {
54 var r = e.charCodeAt(n);
55 if (r < 128) {
56 t += String.fromCharCode(r)
57 } else if (r > 127 && r < 2048) {
58 t += String.fromCharCode(r >> 6 | 192);
59 t += String.fromCharCode(r & 63 | 128)
60 } else {
61 t += String.fromCharCode(r >> 12 | 224);
62 t += String.fromCharCode(r >> 6 & 63 | 128);
63 t += String.fromCharCode(r & 63 | 128)
64 }
65 }
66 return t
67 }, _utf8_decode: function (e) {
68 var t = "";
69 var n = 0;
70 var r = c1 = c2 = 0;
71 while (n < e.length) {
72 r = e.charCodeAt(n);
73 if (r < 128) {
74 t += String.fromCharCode(r);
75 n++
76 } else if (r > 191 && r < 224) {
77 c2 = e.charCodeAt(n + 1);
78 t += String.fromCharCode((r & 31) << 6 | c2 & 63);
79 n += 2
80 } else {
81 c2 = e.charCodeAt(n + 1);
82 c3 = e.charCodeAt(n + 2);
83 t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
84 n += 3
85 }
86 }
87 return t
88 }
89 }
90 // Define the string
91 var string = 'Hello World!';
92 // Encode the String
93 var encodedString = Base64.encode(string);
94 console.log(encodedString); // Outputs: "SGVsbG8gV29ybGQh"
95 // Decode the String
96 var decodedString = Base64.decode(encodedString);
97 console.log(decodedString); // Outputs: "Hello World!"
98
99 //这个自定义的Base64对象可以转码的字符也不仅限于Latin1字符;
100 var string = "Hello, 中国!";
101 var encodedString = Base64.encode(string);//"SGVsbG8sIOS4reWbve+8gQ=="
102 console.log(encodedString);
103 var decodedString = Base64.decode(encodedString);
104 console.log(decodedString); //"Hello, 中国!"
四、JavaScript的api支持Base64
javascript的api支持Base64,因此我们可以很方便的来进行编译码。
var encodeData = window.btoa("name=xiaoming&age=10") //编码 bmFtZT14aWFvbWluZyZhZ2U9MTA=
var decodeData = window.atob(encodeData) //解码 name=xiaoming&age=10
btoa和atob是window对象的两个函数,其中btoa是binary to ascii,用于将binary的数据用ascii码表示,即Base64的编码过程,而atob则是ascii to binary,用于将ascii码解析成binary数据,看一个例子:
1 // Define the stringvar
2 string = 'Hello World!';
3
4 // Encode the Stringvar
5 encodedString = btoa(string); console.log(encodedString); // Outputs: "SGVsbG8gV29ybGQh"
6
7 // Decode the Stringvar
8 decodedString = atob(encodedString); console.log(decodedString); // Outputs: "Hello World!"
但是window.btoa这中编码方式不能直接作用于Unicode字符串,只能将ascci字符串或二进制数据转换成Base64编码过的字符串。
如果要对Unicode字符进行编码可以将做如下转换:
var encodeData = window.btoa(window.encodeURIComponent("name=小明&age=10")) //编码 bmFtZSUzRCVFNSVCMCU4RiVFNiU5OCU4RSUyNmFnZSUzRDEw
var decodeData = window.decodeURIComponent(window.atob(encodeData)) //解码 name=小明&age=10
五、通过nodeJs包管理工具安装base64插件:
npm install --save js-base64
引入base64:
import { Base64 } from 'js-base64';
使用base64:
编码:Base64.encode();
译码:Base64.decode();