JavaScript三行代码实现base64的编码和解码

好吧,做了回标题党==
但是,说的的确也没错。不需要使用其他的js库,也可以轻松的实现base64的编码和解码,不信你可以往下看。

基本方法

  • 编码: btoa()
    你可以使用window.btoa(str)来将一个字符串编码成base64的字符串。
    base64-01
  • 解码: atob()
    window.atob(str)可以将一个base64编码后的字符串解码。
    base64-02
    参数如果不是正确的base64编码后的话,该方法会抛出DOMException的异常。

base64-03

Unicode问题

如果有字符超出了8位ASCII编码的字符范围时,在大多数的浏览器中对Unicode字符串调用 window.btoa 将会造成一个 Character Out Of Range 的异常。比如:
base64-04

解决方案

方案1:转义(escape)整个字符串然后编码这个它

编码:

function b64EncodeUnicode(str) {
    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
        return String.fromCharCode('0x' + p1);
    }));
}

运行一下可以看到,编码成功!
base64-05
解码:

function b64DecodeUnicode(str) {
    return decodeURIComponent(atob(str).split('').map(function(c) {
        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
    }).join(''));
}

解码刚才的编码后的“科比”,成功!
base64-06

方案2: 将UTF-16的 DOMString 转码为UTF-8的字符数组然后编码它

这一方案的实现,可以参考js库:base64.js

参考文档:

本文主要参考MDN WEB DOCS的这篇文章:https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值