一直以来不少人使用到 JavaScript 进行 base64 编码解码时都是使用的 Base64.js,但事实上,浏览器很早就原生支持 base64 的编码与解码了javascript
之前的方式html
编码:java
<javascript src="/base64.js"></javascript> <javascript> Base64.encode('xiaomabuhei'); // 返回:'eGlhb21hYnVoZWk=' </javascript>
解码:git
<javascript src="/base64.js"></javascript> <javascript> Base64.decode('eGlhb21hYnVoZWk='); // 返回:'xiaomabuhei' </javascript>
而浏览器的原生支持的编码与解码github
编码:api
// 浏览器中 var decodedData = window.atob(encodedData); // 或者(浏览器或js Worker线程中): var decodedData = self.atob(encodedData); // 例如: window.atob('eGlhb21hYnVoZWk='); // 返回:'xiaomabuhei'
解码:浏览器
// 浏览器中: var encodedData = window.btoa(stringToEncode); // 或者(浏览器或js Worker线程中): var encodedData = self.btoa(stringToEncode); //例如: window.btoa('xiaomabuhei'); // 返回:'eGlhb21hYnVoZWk='
遇到中文编码须要先作一次 URI 组件编码或对解码后的内容进行 URI 解码编码
window.btoa(window.encodeURIComponent('小马不黑')) // 返回 "JUU1JUIwJThGJUU5JUE5JUFDJUU0JUI4JThEJUU5JUJCJTkx" window.decodeURI(atob('JUU1JUIwJThGJUU5JUE5JUFDJUU0JUI4JThEJUU5JUJCJTkx')) // 返回 "小马不黑"
针对 IE8 IE9 的兼容使用 polyfill线程
<!--[if IE]> <script src="./base64-polyfill.js"></script> <![endif]-->
polyfill 请转移至 base-polyfill code
借助FileReader
对象和readAsDataURL
方法,咱们能够把任意的文件转换为Base64 Data-URI。假设咱们的文件对象是file
,则转换的JavaScript代码以下:
var reader = new FileReader(); reader.onload = function(e) { // e.target.result就是该文件的完整Base64 Data-URI }; reader.readAsDataURL(file);
读取的有如下方法可用:(IE请使用 ActiveXObject 对象操做文件)
reader.abort() // 取消文件读取操做 reader.readAsArrayBuffer() // 返回一个 ArrayBuffer 的数据对象 reader.readAsBinaryString() // 返回原始二进制数据内容 (实验性的api) reader.readAsDataURL() // 返回 base64 内容 reader.readAsText() // 返回文本内容 // 上述方法皆对于 file 或 blob 有效