一直以来很多人使用到 JavaScript 进行 base64 编码解码时都是使用的 Base64.js,但事实上,浏览器很早就原生支持 base64 的编码与解码了

以前的方式

  编码:

<javascript src="/base64.js"></javascript>
<javascript>
Base64.encode('xiaomabuhei');
// 返回:'eGlhb21hYnVoZWk='
</javascript>

  解码:

<javascript src="/base64.js"></javascript>
<javascript>
Base64.decode('eGlhb21hYnVoZWk=');
// 返回:'xiaomabuhei'
</javascript>

而浏览器的原生支持的编码与解码

  编码:

// 浏览器中
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

借助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 有效

  

js实现base64编码与解码(原生js)的更多相关文章

  1. js的Base64编码与解码

    js的Base64编码与解码 pc和手机app项目中,经常需要将手机自带的表情图片转换特定的编码格式与后台进行交互. Base64其实是一种简单的置换加密方式,但是BASE64的用处往往并不是为了防止 ...

  2. JS实现Base64编码、解码,即window.atob,window.btoa功能

    window.atob(),window.btoa()方法可以对字符串精选base64编码和解码,但是有些环境比如nuxt的服务端环境没法使用window,所以需要自己实现一个base64的编码解码功 ...

  3. JS实现base64编码与解码

    var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ...

  4. JS实现——Base64编码解码,带16进制显示

    在网上找了个JS实现的Base64编码转换,所以就想自己研究下,界面如下: 将代码以BASE64方式加密.解密 请输入要进行编码或解码的字符: 编码结果以ASCII码16进制显示 解码结果以ASCII ...

  5. js 显示 base64编码 的二进制流 图片

    Data URI scheme.Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入.比如上面那串字符,其实是一张小图片,将这些字 ...

  6. Javascript Base64编码与解码

    原文:[转]Javascript Base64编码与解码 <html> <head> <META HTTP-EQUIV="MSThemeCompatible&q ...

  7. javascript实现base64编码、解码

    我们知道,浏览器的window对象提供有window.atob()和window.btoa()方法可以对字符串进行Base64编码和解码. console.log(window.btoa(window ...

  8. Kotlin/Java Base64编码和解码(图片、文件)

    原文: Kotlin/Java Base64编码和解码(图片.文件) | Stars-One的杂货小窝 最近在项目中使用到了Base64编码和解码,便是稍微写篇文章记录一下 PS:本文代码都是使用Ko ...

  9. BASE64编码和解码(VC源代码) 并 内存加载 CImage 图像

      BASE64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本.完整的BASE64定义可见 RFC1421和 RFC2045.编码后的数据比原始数据略长,为原来的4/3.在电子 ...

随机推荐

  1. CentOS7 下使用 Nginx

    update: 2019-03-25 --新增新装 Nginx 的启动.重启.关闭和查看 2019-02-19 --新增 yum 方式快速简单安装 Nginx 2018-09-29 --新增配置文件对 ...

  2. 洛谷 P4317 花神的数论题(组合数)

    题面 luogu 题解 组合数 枚举有多少个\(1\),求出有多少种数 扫描\(n\)的每一位\(1\), 强制选\(0\)然后组合数算一下有多少种方案 Code #include<bits/s ...

  3. Hash 日常摸鱼笔记

    本篇文章是Hash在信息学竞赛中的应用的学习笔记,分多次更新(已经有很多坑了) 一维递推 首先是Rabin-Karp,对于一个长度为\(m\)的串\(S\) \(f(S)=\sum_{i=1}^{m} ...

  4. panda强化练习2

    In [1]: import pandas as pd import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sa ...

  5. postgresql 的一些操作

    (4)常用数据库命令(mysql为MySQL数据库操作命令,psql为postgresql数据库命令) 手动重启数据库命令:pg_ctl -D /usr/local/var/postgres -l / ...

  6. Spark遇到的报错和坑

    1. Java版本不一致,导致启动报错. # 解决方法: 在启动脚本最前边添加系统参数,指定Java版本 export JAVA_HOME=/usr/java/jdk1..0_181-amd64/jr ...

  7. qs.parse() 和 qs.stringfy() 之 传输数据秘籍

    qs是一个npm仓库所管理的包,可通过npm install qs命令进行安装. 1. qs.parse()将URL解析成对象的形式 const Qs = require('qs');let url ...

  8. Win32窗口创建过程

    编写窗口程序的步骤:    1 定义WinMain函数    2 定义窗口处理函数–自己定义处理消息    3 注册窗口类(往OS写入数据)    4 创建窗口 (在内存中创建窗口)    5 显示窗 ...

  9. jenkins +gitlab 自动化代码秒级上线

    一,配置脚本 #!/bin/bash #目标服务器IP地址 host=$ #job名称 job_name=$ #包名 name=web-$(date +)) #打包 cd /var/lib/jenki ...

  10. Docker_network相关指令

    docker network create创建docker网卡docker network create -d overlay --ip-range=192.168.2.0/24 --gateway= ...