js 中进行 base64 编码

1,368 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情

Base 编码系列包括 Base64 Base32 Base16。其中,Base64 编码是使用 64 位 ASCII 字符将数据编码成 ASCII 字符串,结尾用 “=” 等号作为后缀

base64 常用于处理文本数据的场合,比如登录时传输密码时进行加密,图片也通常会使用 Base64 的形式加载或者存储(这样渲染时就不需要额外请求外部资源)

base64 索引表如下:

image.png

那么,base64 该如何进行编码和解码?

方法一:window 对象的 btoa 和 atob

btoa 和 atob 是window对象的两个函数,这表示我们可以不需要引入第三方的内容就可以直接使用。

1. 编码 btoa

将 ASCII 字符串或二进制数据转换成 base64 编码的字符串

let str = "hello";
console.log(btoa(str));

运行结果:

image.png

注:编码时不支持 Unicode 字符,比如下面这段代码,执行后会出现报错:

image.png

2. 解码 atob

将 base64 编码的字符串进行解码

let str = "aGVsbG8=";
console.log(atob(str));

运行结果:

image.png

3、中文字符编码解决方案

使用 JavaScript 的全局函数:

  • encodeURIComponent():把字符串作为URI 组件进行编码
  • decodeURIComponent():对 encodeURIComponent() 函数编码的 URI 进行解码
var s = btoa(encodeURIComponent("你好"));
console.log(s)

编码:

image.png

将上面获取的编码进行解码:

var s = decodeURIComponent(atob("JUU0JUJEJUEwJUU1JUE1JUJE"));
console.log(s)

image.png

方法二:js-base64

安装js-base64依赖

   npm install js-base64 --save

引入:

import Base64 from 'js-base64'
Vue.use(Base64)

编码和解码:

Base64.encode(str);
Base64.decode(str);

图片的 base64

正常情况下,网页上图片需要 http 请求来下载,将图片转成 base64 字符串后,加载页面时可以节省 http 请求的数量(但是会增加 css 文件的大小)