• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > JavaScript BASE64算法实现(完美解决中文乱码)

JavaScript BASE64算法实现(完美解决中文乱码)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了javascript base64,base64算法,base64加密算法,java base64算法,base64加密解密算法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

JavaScript 的 BASE64 算法

var BASE64={
  
  enKey: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
  
  deKey: new Array(
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
    -1, 0, 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, -1, -1, -1, -1, -1,
    -1, 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, -1, -1, -1, -1, -1
  ),
  
  encode: function(src){
    //用一个数组来存放编码后的字符,效率比用字符串相加高很多。
    var str=new Array();
    var ch1, ch2, ch3;
    var pos=0;
    //每三个字符进行编码。
    while(pos+3<=src.length){
      ch1=src.charCodeAt(pos++);
      ch2=src.charCodeAt(pos++);
      ch3=src.charCodeAt(pos++);
      str.push(this.enKey.charAt(ch1>>2), this.enKey.charAt(((ch1<<4)+(ch2>>4))&0x3f));
      str.push(this.enKey.charAt(((ch2<<2)+(ch3>>6))&0x3f), this.enKey.charAt(ch3&0x3f));
    }
    //给剩下的字符进行编码。
    if(pos<src.length){
      ch1=src.charCodeAt(pos++);
      str.push(this.enKey.charAt(ch1>>2));
      if(pos<src.length){
        ch2=src.charCodeAt(pos);
        str.push(this.enKey.charAt(((ch1<<4)+(ch2>>4))&0x3f));
        str.push(this.enKey.charAt(ch2<<2&0x3f), '=');
      }else{
        str.push(this.enKey.charAt(ch1<<4&0x3f), '==');
      }
    }
    //组合各编码后的字符,连成一个字符串。
    return str.join('');
  },
  
  decode: function(src){
    //用一个数组来存放解码后的字符。
    var str=new Array();
    var ch1, ch2, ch3, ch4;
    var pos=0;
    //过滤非法字符,并去掉'='。
    src=src.replace(/[^A-Za-z0-9\+\/]/g, '');
    //decode the source string in partition of per four characters.
    while(pos+4<=src.length){
      ch1=this.deKey[src.charCodeAt(pos++)];
      ch2=this.deKey[src.charCodeAt(pos++)];
      ch3=this.deKey[src.charCodeAt(pos++)];
      ch4=this.deKey[src.charCodeAt(pos++)];
      str.push(String.fromCharCode(
        (ch1<<2&0xff)+(ch2>>4), (ch2<<4&0xff)+(ch3>>2), (ch3<<6&0xff)+ch4));
    }
    //给剩下的字符进行解码。
    if(pos+1<src.length){
      ch1=this.deKey[src.charCodeAt(pos++)];
      ch2=this.deKey[src.charCodeAt(pos++)];
      if(pos<src.length){
        ch3=this.deKey[src.charCodeAt(pos)];
        str.push(String.fromCharCode((ch1<<2&0xff)+(ch2>>4), (ch2<<4&0xff)+(ch3>>2)));
      }else{
        str.push(String.fromCharCode((ch1<<2&0xff)+(ch2>>4)));
      }
    }
    //组合各解码后的字符,连成一个字符串。
    return str.join('');
  }
};
</div>

使用方法:

var str='hello world!';
var enstr=BASE64.encode(str);
alert(enstr);
var destr=BASE64.decode(enstr);
alert(destr);
</div>

收藏的Base64编码/解码.在一个外国网站看到的.不过对中文不支持.
自己加入了escape,.对中文也支持了.
先用escape()对中文进行编码.然后再进行base64编码.
解码时,再加入()对中文进行解码.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
 <title> New Document </title>
 <meta name="Generator" content="EditPlus">
 <meta name="Author" content="">
 <meta name="Keywords" content="">
 <meta name="Description" content="">
 <script type='text/javascript'>
  var keyStr = "ABCDEFGHIJKLMNOP" +
        "QRSTUVWXYZabcdef" +
        "ghijklmnopqrstuv" +
        "wxyz0123456789+/" +
        "=";
  function encode64(input) {
   input = escape(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);
  }
  function decode64(input) {
   var output = "";
   var chr1, chr2, chr3 = "";
   var enc1, enc2, enc3, enc4 = "";
   var i = 0;
   // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
   var base64test = /[^A-Za-z0-9\+\/\=]/g;
   if (base64test.exec(input)) {
     alert("There were invalid base64 characters in the input text.\n" +
        "Valid base64 characters are A-Z, a-z, 0-9, '+', '/', and '='\n" +
        "Expect errors in decoding.");
   }
   input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
   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 = output + String.fromCharCode(chr2);
     }
     if (enc4 != 64) {
      output = output + String.fromCharCode(chr3);
     }
     chr1 = chr2 = chr3 = "";
     enc1 = enc2 = enc3 = enc4 = "";
   } while (i < input.length);
   return (output);
 }
function aa(){
var str='中国';
var enstr=encode64(str);
alert(enstr);
var destr=decode64(enstr);
alert(destr);
}
 </script>
 </head>

 <body>
 <input type="button" onclick="aa()">
 
 </body>
</html>
</div>

我用了上面的进行了操作,但是用java来base64后的字符串传到前台后,一直解决不了中文乱码的问题,经过不懈的努力,终于搞定了。解决了javascript中base64解码(decode)的中文乱码问题
直接上页面,复制到网页直接可以用

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <title> New Document </title>
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <meta name="Generator" content="EditPlus">
 <meta name="Author" content="">
 <meta name="Keywords" content="">
 <meta name="Description" content="">
<script>
//UnicodeAnsi.js文件
//把Unicode转成Ansi和把Ansi转换成Unicode
function UnicodeChr(){
return '00A4,00A7,00A8,00B0,00B1,00B7,00D7,00E0,00E1,00E8,00E9,00EA,00EC,00ED,00F2,00F3,00F7,00F9,00FA,00FC,0101,0113,011B,012B,014D,016B,01CE,01D0,01D2,01D4,01D6,01D8,01DA,01DC,02C7,02C9,0391,0392,0393,0394,0395,0396,0397,0398,0399,039A,039B,039C,039D,039E,039F,03A0,03A1,03A3,03A4,03A5,03A6,03A7,03A8,03A9,03B1,03B2,03B3,03B4,03B5,03B6,03B7,03B8,03B9,03BA,03BB,03BC,03BD,03BE,03BF,03C0,03C1,03C3,03C4,03C5,03C6,03C7,03C8,03C9,0401,0410,0411,0412,0413,0414,0415,0416,0417,0418,0419,041A,041B,041C,041D,041E,041F,0420,0421,0422,0423,0424,0425,0426,0427,0428,0429,042A,042B,042C,042D,042E,042F,0430,0431,0432,0433,0434,0435,0436,0437,0438,0439,043A,043B,043C,043D,043E,043F,0440,0441,0442,0443,0444,0445,0446,0447,0448,0449,044A,044B,044C,044D,044E,044F,0451,2014,2016,2018,2019,201C,201D,2026,2030,2032,2033,203B,2103,2116,2160,2161,2162,216



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • JavaScript Base64 作为文件上传的实例代码解析
  • JavaScript BASE64算法实现(完美解决中文乱码)

相关文章

  • 2017-05-11详解Vue自定义过滤器的实现
  • 2017-05-11Angular下H5上传图片的方法(可多张上传)
  • 2017-05-11详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
  • 2017-05-11jQuery插件JWPlayer视频播放器用法实例分析
  • 2017-05-11基于JavaScript实现的折半查找算法示例
  • 2017-05-11从零开始学习Node.js系列教程二:文本提交与显示方法
  • 2017-05-11vue.js利用defineProperty实现数据的双向绑定
  • 2017-05-11js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
  • 2017-05-11AngularJS路由实现页面跳转实例
  • 2017-05-11使用Bootstrap美化按钮实例代码(demo)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 微信小程序 开发经验整理
    • javascript 的变量、作用域和内存问题
    • 使用jquery给新生的th绑定hover事件的实例
    • Node.JS中事件轮询(Event Loop)的解析
    • js Canvas绘制圆形时钟效果
    • jquery实现提示语淡入效果
    • JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
    • Node.js利用debug模块打印出调试日志的方法
    • 微信小程序 chooseImage选择图片或者拍照
    • jQuery实现鼠标滑过预览图片大图效果的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有