javascript base64 编码,兼容ie6789
用Javascript进行base64编码,在高版本的IE浏览器(IE9以上版本),和firefox,chrome浏览器里是非常方便的。这些浏览器的window对象中内置了base64的编码和解码方法。
var base64String = window.btoa(string) ;//编码
var string = window.atob(base64string) ;//解码
注意:这对编码解码方法只是支持ascii字符集编码,不支持unicode字符集。也就是如果给window.btoa方法的参数是汉字的话,该方法就会报错。所以建议:如果参数可能是unicode字符的话,同意用下面的自定义的base64编码办法会好一点儿。
既然浏览器自带的base64编码不支持unicode字符集的字符,那么我们就想办法让他支持。办法就是先把unicode字符集编码,编码的结果就是只含有utf-8码。看下面的方法。至于为什么要使用encodeURIComponent,escape,请看这里
     function utf8_to_b64(utf8){
         return window.btoa(encodeURIComponent(escape(utf8)));
     }
     function b64_to_utf8(b64){
         return unescape(decodeURIComponent(window.atob(b64)));
     }
不幸的是,低版本的ie浏览器里没有这么一对编码/解码的方法。怎么办?自己提供,看下面的代码:
             (function(){
                 if(window.atob)
                     return;
                 else{
                     var Base64 = window.Base64 || {
                         /* private property*/
                         _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
                         /* public method for encoding */
                         encode : function (input) {
                             var output = "";
                             var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
                             var i = 0;
                             input = Base64._utf8_encode(input);
                             while (i < input.length) {
                                 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 +
                                 Base64._keyStr.charAt(enc1) + Base64._keyStr.charAt(enc2) +
                                 Base64._keyStr.charAt(enc3) + Base64._keyStr.charAt(enc4);
                             }
                             return output;
                         },
                         /* public method for decoding */
                         decode : function (input) {
                             var output = "";
                             var chr1, chr2, chr3;
                             var enc1, enc2, enc3, enc4;
                             var i = 0;
                             input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
                             while (i < input.length) {
                                 enc1 = Base64._keyStr.indexOf(input.charAt(i++));
                                 enc2 = Base64._keyStr.indexOf(input.charAt(i++));
                                 enc3 = Base64._keyStr.indexOf(input.charAt(i++));
                                 enc4 = Base64._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);
                                 }
                             }
                             output = Base64._utf8_decode(output);
                             return output;
                         },
                         /* private method for UTF-8 encoding */
                         _utf8_encode : function (string) {
                             string = string.replace(/\r\n/g,"\n");
                             var utftext = "";
                             for (var n = 0; n < string.length; n++) {
                                 var c = string.charCodeAt(n);
                                 if (c < 128) {
                                     utftext += String.fromCharCode(c);
                                 }
                                 else if((c > 127) && (c < 2048)) {
                                     utftext += String.fromCharCode((c >> 6) | 192);
                                     utftext += String.fromCharCode((c & 63) | 128);
                                 }
                                 else {
                                     utftext += String.fromCharCode((c >> 12) | 224);
                                     utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                                     utftext += String.fromCharCode((c & 63) | 128);
                                 }
                             }
                             return utftext;
                         },
                         /* private method for UTF-8 decoding */
                         _utf8_decode : function (utftext) {
                             var string = "";
                             var i = 0;
                             var c = c1 = c2 = 0;
                             while ( i < utftext.length ) {
                                 c = utftext.charCodeAt(i);
                                 if (c < 128) {
                                     string += String.fromCharCode(c);
                                     i++;
                                 }
                                 else if((c > 191) && (c < 224)) {
                                     c2 = utftext.charCodeAt(i+1);
                                     string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                                     i += 2;
                                 }
                                 else {
                                     c2 = utftext.charCodeAt(i+1);
                                     c3 = utftext.charCodeAt(i+2);
                                     string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                                     i += 3;
                                 }
                             }
                             return string;
                         }
                     }
                     window.Base64 = Base64;
                 }
             })();
这样,就可以为一些浏览器里不支持base64编码浏览器提供一种方法。base64编码的代码摘自这里。
javascript base64 编码,兼容ie6789的更多相关文章
- Javascript Base64编码与解码
		原文:[转]Javascript Base64编码与解码 <html> <head> <META HTTP-EQUIV="MSThemeCompatible&q ... 
- JavaScript - Base64 编码解码
		以下代码摘自:http://cryptojs.altervista.org/encoding/Base64.html function base64_encode(str) { if (window. ... 
- 图片的base64编码通过javascript生成图片--当前URL地址的二维码应用
		前面的话 在电脑端发现一篇好的博文,想在手机上访问.这时,就必须打开手机浏览器输入长长的URL地址才行,非常不方便.如果在博客标题的后面跟一张小的图片,点击该图片后,出现一张二维码的大图,然后再通过手 ... 
- 用javascript实现base64编码器以及图片的base64编码
		前面的话 base-64作为常见的编码函数,在基本认证.摘要认证以及一些HTTP扩展中得到了大量应用.在前端领域,也常常把图片转换为base-64编码在网络中传输.本文将详细介绍base64的原理及用 ... 
- Javascript 将图片的绝对路径转换为base64编码
		Javascript将图片的绝对路径转换为base64编码 我们可以使用canvas.toDataURL的方法将图片的绝对路径转换为base64编码:在这我们引用的是淘宝首页一张图片如下: var i ... 
- Javascript中Base64编码解码的使用实例
		Javascript为我们提供了一个简单的方法来实现字符串的Base64编码和解码,分别是window.btoa()函数和window.atob()函数. 1 var encodedStr = win ... 
- JavaScript:详解 Base64 编码和解码
		Base64是最常用的编码之一,比如开发中用于传递参数.现代浏览器中的<img />标签直接通过Base64字符串来渲染图片以及用于邮件中等等.Base64编码在RFC2045中定义,它被 ... 
- javascript实现base64编码、解码
		我们知道,浏览器的window对象提供有window.atob()和window.btoa()方法可以对字符串进行Base64编码和解码. console.log(window.btoa(window ... 
- javascript将base64编码的图片数据转换为file并提交
		/** @param base64Codes 图片的base64编码 */ function sumitImageFile(base64Codes){ var form=document.forms[ ... 
随机推荐
- 【贪心+二分】codeforces D. Magazine Ad
			codeforces.com/contest/803/problem/D [题意] 给定一个字符串,字符串里可能有空格和连字符‘-’,空格和连字符的意义是一样的,都表示:能在那个位置把字符串分成两部分 ... 
- 【bzoj4260】 Codechef REBXOR trie树
			Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. Output 输出一行包含给定表达式可能的最大值. Sample Input ... 
- C++内存分配方式(——选自:C++内存管理技术内幕)
			C++内存分配的区: 1.栈:程序运行时分配的,局部变量,以及传入的参数等存储的地方,在程序结束的时候会回收 2.堆:new分配,由delete释放 3.自由存储区:malloc分配 4.全局/静态存 ... 
- typeof、constructor和instanceof
			在JavaScript中,我们经常使用typeof来判断一个变量的类型,使用格式为:typeof(data)或typeof data.typeof返回的数据类型有六种:number.string.bo ... 
- POJ 1753 Flip Game【枚举】
			题目链接: http://poj.org/problem?id=1753 题意: 由白块黑块组成的4*4方格,每次换一个块的颜色,其上下左右的块也会被换成相反的颜色.问最少换多少块,使得最终方格变为全 ... 
- The Bottom of a Graph
			poj——The Bottom of a Graph Time Limit: 3000MS Memory Limit: 65536K ... 
- Spring Cloud(9):Config配置中心
			Config配置中心作用简单来讲:统一配置,方便管理 开源配置中心: 1.百度Disconf 2.阿里Diamand 3.Spring Cloud Config 搭建Config-Server 快速上 ... 
- 通过简单的两数相加体会hashmap的好处
			目录 引入题目:两数相加 HashMap相关知识: Map集合 Map集合的特点 Map常用子类 HashMap集合 LinkedHashMap集合 Map集合的常用方法 Map集合的第一种遍历方式: ... 
- 黑黛增发罗林川:如何三年开1000家连锁店?_深度案例_i黑马
			黑黛增发罗林川:如何三年开1000家连锁店?_深度案例_i黑马 黑黛增发 
- SQL2008安装时,“provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (.Net SqlClient Data Provider)” 错误的解决方案
			错误提示: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provide ... 
