本文实例讲述了JS实现对中文字符串进行utf-8的Base64编码的方法。分享给大家供大家参考,具体如下:
要进行编码的字符串:“select 用户名 from 用户”
使用JAVA进行编码,Java程序:
1
2
3
|
String sql =
"select 用户名 from 用户"
;
String encodeStr =
new
String(Base64.encode(sql.getBytes(
"UTF-8"
)));
// 编码
System.out.println(encodeStr);
|
得到:
1
|
c2VsZWN0IOeUqOaIt+WQjSBmcm9tIOeUqOaItw==
|
在Java中解码:
1
|
sql =
new
String(Base64.decode(sql.getBytes()),
"UTF-8"
);
|
Java代码中为什么要使用getBytes("UTF-8")呢?因为Windows和Linux环境下默认编码不同,要使你的程序在不同平台下得到相同编码,必然要指定编码
虽然Html和JS的编码都是utf-8,但JS从页面上得到的中文编码却是utf-16,所以直接对中文进行Base64编码将得到错误的结果,所以我们要先从utf-16转到utf-8再编码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
<head>
<title></title>
<meta http-equiv=
"Content-Type"
content=
"text/html; charset=utf-8"
/>
<style type=
"text/css"
>
<!--
body{
margin:0px;
padding:0px;
}
body,td{
font-size:9pt;
}
-->
</style>
<script type=
"text/JavaScript"
>
<!--
var
keyStr =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
;
//将Ansi编码的字符串进行Base64编码
function
encode64(input) {
var
output =
""
;
var
chr1, chr2, chr3 =
""
;
var
enc1, enc2, enc3, enc4 =
""
;
var
i = 0;
do
{
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if
(isNaN(chr2)) {
enc3 = enc4 = 64;
}
else
if
(isNaN(chr3)) {
enc4 = 64;
}
output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2)
+ keyStr.charAt(enc3) + keyStr.charAt(enc4);
chr1 = chr2 = chr3 =
""
;
enc1 = enc2 = enc3 = enc4 =
""
;
}
while
(i < input.length);
return
output;
}
//将Base64编码字符串转换成Ansi编码的字符串
function
decode64(input) {
var
output =
""
;
var
chr1, chr2, chr3 =
""
;
var
enc1, enc2, enc3, enc4 =
""
;
var
i = 0;
if
(input.length % 4 != 0) {
return
""
;
}
var
base64test = /[^A-Za-z0-9\+\/\=]/g;
if
(base64test.exec(input)) {
return
""
;
}
do
{
enc1 = keyStr.indexOf(input.charAt(i++));
enc2 = keyStr.indexOf(input.charAt(i++));
enc3 = keyStr.indexOf(input.charAt(i++));
enc4 = keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if
(enc3 != 64) {
output += String.fromCharCode(chr2);
}
if
(enc4 != 64) {
output += String.fromCharCode(chr3);
}
chr1 = chr2 = chr3 =
""
;
enc1 = enc2 = enc3 = enc4 =
""
;
}
while
(i < input.length);
return
output;
}
function
utf16to8(str) {
var
out, i, len, c;
out =
""
;
len = str.length;
for
(i = 0; i < len; i++) {
c = str.charCodeAt(i);
if
((c >= 0x0001) && (c <= 0x007F)) {
out += str.charAt(i);
}
else
if
(c > 0x07FF) {
out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
}
else
{
out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
}
}
return
out;
}
function
utf8to16(str) {
var
out, i, len, c;
var
char2, char3;
out =
""
;
len = str.length;
i = 0;
while
(i < len) {
c = str.charCodeAt(i++);
switch
(c >> 4) {
case
0:
case
1:
case
2:
case
3:
case
4:
case
5:
case
6:
case
7:
// 0xxxxxxx
out += str.charAt(i-1);
break
;
case
12:
case
13:
// 110x xxxx 10xx xxxx
char2 = str.charCodeAt(i++);
out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
break
;
case
14:
// 1110 xxxx 10xx xxxx 10xx xxxx
char2 = str.charCodeAt(i++);
char3 = str.charCodeAt(i++);
out += String.fromCharCode(((c & 0x0F) << 12) |
((char2 & 0x3F) << 6) |
((char3 & 0x3F) << 0));
break
;
}
}
return
out;
}
// 测试代码 开始
var
de = encode64(utf16to8(
"select 用户名 from 用户"
));
document.writeln(de+
"<br>"
);
var
ee = utf8to16(decode64(de))
document.writeln(ee);
// 测试代码 结束
//-->
</script>
</head>
<body>
</body>
</html>
|