Base64与UTF-8
来源:互联网 发布:王者荣耀聊天软件 编辑:程序博客网 时间:2024/06/06 09:39
本文实例讲述了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"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<html xmlns=
"http://www.w3.org/1999/xhtml"
>
<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>
阅读全文
0 0
- Base64与UTF-8
- GBK,UTF-8,ISO8859-1,unicode,base64
- utf-8与UTF-8
- 使用JS对中文字符串进行utf-8的Base64编码,使其与Java编码相同的办法
- 使用JS对中文字符串进行utf-8的Base64编码,使其与Java编码相同的办法
- 图片下载和压缩并转码成UTF-8的Base64流
- 字符编码笔记:ASCII、Unicode、UTF-8 和 Base64
- 字符编码笔记:ASCII、Unicode、UTF-8 和 Base64
- Android DES MD5 UTF—8 BASE64 加密解密
- Android 加密解密 DES BASE64 MD5 UTF-8
- Android 加密解密 DES BASE64 MD5 UTF-8
- Unicode 与 UTF-8
- GB2312与UTF-8
- session_start() 与 UTF-8
- GB2312与UTF-8
- utf-8与unicode
- utf-8 与unicode
- GBK与UTF-8
- ElasticSearch搜索提示(Suggester)
- Android按钮单击事件的四种常用写法总结
- Android Studio与夜神模拟器开发调试 error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:
- Vim常用操作-Nginx配置文件批量加注释。
- linux挂载光盘时出现mount: block device /dev/sr0 is write-protected, mounting read-only
- Base64与UTF-8
- Java爬虫入门(二):单机单程序单线程-提供种子url用广度优先算法实现新闻资讯获取
- 利用Tensorflow实现SSD架构model训练(voc2012)
- 你不知道的JS-读书笔记(一)--作用域
- 深度学习库(排名总结)
- 优化数据库第五章
- Oracle性能优化-读懂执行计划
- Log4 日志级别
- Struts2(十一)---类型转换