JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)


Posted in Javascript onJune 21, 2016

本文实例讲述了JS实现对中文字符串进行utf-8的Base64编码的方法。分享给大家供大家参考,具体如下:

要进行编码的字符串:“select 用户名 from 用户”

使用JAVA进行编码,Java程序:

String sql = "select 用户名 from 用户";
String encodeStr = new String(Base64.encode(sql.getBytes("UTF-8"))); // 编码
System.out.println(encodeStr);

得到:

c2VsZWN0IOeUqOaIt+WQjSBmcm9tIOeUqOaItw==

在Java中解码:

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再编码

<!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>

上面的代码都是从网上得来,拼凑后得到正确结果,在此感谢前辈们

PS:这里再为大家推荐几款base64编码解码在线工具,相信在以后的开发中会用得到:

BASE64编码解码工具:
http://tools.3water.com/transcoding/base64

在线图片转换BASE64工具:
http://tools.3water.com/transcoding/img2base64

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
MooTools 1.2中的Drag.Move来实现拖放
Sep 15 Javascript
js parseInt(&quot;08&quot;)未指定进位制问题
Jun 19 Javascript
JavaScript中的console.time()函数详细介绍
Dec 29 Javascript
js实现无缝滚动特效
Dec 20 Javascript
AngularJS基础 ng-copy 指令实例代码
Aug 01 Javascript
微信小程序之拖拽排序(代码分享)
Jan 21 Javascript
微信小程序 swiper组件构建轮播图的实例
Sep 20 Javascript
vue使用自定义icon图标的方法
May 14 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
Mar 27 Javascript
微信小程序封装自定义弹窗的实现代码
May 08 Javascript
js中arguments对象的深入理解
May 14 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
Jun 18 jQuery
第十篇BootStrap轮播插件使用详解
Jun 21 #Javascript
JavaScript简单获取页面图片原始尺寸的方法
Jun 21 #Javascript
第九篇Bootstrap导航菜单创建步骤详解
Jun 21 #Javascript
js简单判断flash是否加载完成的方法
Jun 21 #Javascript
第八篇Bootstrap下拉菜单实例代码
Jun 21 #Javascript
JS实现获取剪贴板内容的方法
Jun 21 #Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
Jun 21 #Javascript
You might like
PHPMyAdmin 快速配置方法
2009/05/11 PHP
ThinkPHP分页类使用详解
2014/03/05 PHP
PHP 验证登陆类分享
2015/03/13 PHP
PHP安全下载文件的方法
2016/04/07 PHP
Smarty3配置及入门语法
2017/02/22 PHP
js原生态函数中使用jQuery中的 $(this)无效的解决方法
2011/05/25 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
2017/01/18 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
jQuery pagination分页示例详解
2018/10/23 jQuery
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
Python内置函数property()如何使用
2020/09/01 Python
python之随机数函数的实现示例
2020/12/30 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
学习心理学的体会
2014/11/07 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫
Python使用Web框架Flask开发项目
2022/06/01 Python