JS实现Base64编码、解码,即window.atob,window.btoa功能
window.atob(),window.btoa()方法可以对字符串精选base64编码和解码,但是有些环境比如nuxt的服务端环境没法使用window,所以需要自己实现一个base64的编码解码功能,下面是原生js实现该功能,可以作为一个常用工具使用。
- // private property
- let _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- // private method for UTF-8 encoding
- function _utf8_encode (string) {
- string = string.replace(/\r\n/g,"\n");
- let utftext = "";
- for (let n = ; n < string.length; n++) {
- let c = string.charCodeAt(n);
- if (c < ) {
- utftext += String.fromCharCode(c);
- } else if((c > ) && (c < )) {
- utftext += String.fromCharCode((c >> ) | );
- utftext += String.fromCharCode((c & ) | );
- } else {
- utftext += String.fromCharCode((c >> ) | );
- utftext += String.fromCharCode(((c >> ) & ) | );
- utftext += String.fromCharCode((c & ) | );
- }
- }
- return utftext;
- }
- // private method for UTF-8 decoding
- function _utf8_decode (utftext) {
- let string = "";
- let i = ;
- let c = ;
- let c1 = ;
- let c2 = ;
- let c3 = ;
- while ( i < utftext.length ) {
- c = utftext.charCodeAt(i);
- if (c < ) {
- string += String.fromCharCode(c);
- i++;
- } else if((c > ) && (c < )) {
- c2 = utftext.charCodeAt(i+);
- string += String.fromCharCode(((c & ) << ) | (c2 & ));
- i += ;
- } else {
- c2 = utftext.charCodeAt(i+);
- c3 = utftext.charCodeAt(i+);
- string += String.fromCharCode(((c & ) << ) | ((c2 & ) << ) | (c3 & ));
- i += ;
- }
- }
- return string;
- }
- // public method for encoding
- export const encode = (input) => {
- let output = "";
- let chr1, chr2, chr3, enc1, enc2, enc3, enc4;
- let i = ;
- input = _utf8_encode(input);
- while (i < input.length) {
- chr1 = input.charCodeAt(i++);
- chr2 = input.charCodeAt(i++);
- chr3 = input.charCodeAt(i++);
- enc1 = chr1 >> ;
- enc2 = ((chr1 & ) << ) | (chr2 >> );
- enc3 = ((chr2 & ) << ) | (chr3 >> );
- enc4 = chr3 & ;
- if (isNaN(chr2)) {
- enc3 = enc4 = ;
- } else if (isNaN(chr3)) {
- enc4 = ;
- }
- output = output +
- _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
- _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
- }
- return output;
- }
- // public method for decoding
- export const decode = (input) => {
- let output = "";
- let chr1, chr2, chr3;
- let enc1, enc2, enc3, enc4;
- let i = ;
- input = input.replace(/[^A-Za-z0-\+\/\=]/g, "");
- while (i < input.length) {
- enc1 = _keyStr.indexOf(input.charAt(i++));
- enc2 = _keyStr.indexOf(input.charAt(i++));
- enc3 = _keyStr.indexOf(input.charAt(i++));
- enc4 = _keyStr.indexOf(input.charAt(i++));
- chr1 = (enc1 << ) | (enc2 >> );
- chr2 = ((enc2 & ) << ) | (enc3 >> );
- chr3 = ((enc3 & ) << ) | enc4;
- output = output + String.fromCharCode(chr1);
- if (enc3 != ) {
- output = output + String.fromCharCode(chr2);
- }
- if (enc4 != ) {
- output = output + String.fromCharCode(chr3);
- }
- }
- output = _utf8_decode(output);
- return output;
- }
当然github上还有很多比较好的base64转码解码插件,可以自行查找
JS实现Base64编码、解码,即window.atob,window.btoa功能的更多相关文章
- JS实现——Base64编码解码,带16进制显示
在网上找了个JS实现的Base64编码转换,所以就想自己研究下,界面如下: 将代码以BASE64方式加密.解密 请输入要进行编码或解码的字符: 编码结果以ASCII码16进制显示 解码结果以ASCII ...
- js简单Base64编码解码
var str = 'javascript'; window.btoa(str) //转码结果 "amF2YXNjcmlwdA==" window.atob("amF2Y ...
- 原生js实现Base64编码解码
注:ie10+ var str = window.btoa("liusong"); console.log(str); var s = window.atob("bGl1 ...
- JS的base64编码解码
Unicode问题解法 有个小坑是它只支持ASCII. 如果你调用btoa("中文")会报错: Uncaught DOMException: Failed to execute ' ...
- 原来浏览器原生支持JS Base64编码解码 outside of the Latin1 range
原来浏览器原生支持JS Base64编码解码 « 张鑫旭-鑫空间-鑫生活 https://www.zhangxinxu.com/wordpress/2018/08/js-base64-atob-bto ...
- js的Base64编码与解码
js的Base64编码与解码 pc和手机app项目中,经常需要将手机自带的表情图片转换特定的编码格式与后台进行交互. Base64其实是一种简单的置换加密方式,但是BASE64的用处往往并不是为了防止 ...
- Javascript中Base64编码解码的使用实例
Javascript为我们提供了一个简单的方法来实现字符串的Base64编码和解码,分别是window.btoa()函数和window.atob()函数. 1 var encodedStr = win ...
- 常用的js、java编码解码方法
前言 前后端直接传输数据进行交互不就行了吗,为什么还要进行编码解码?正常情况下直接交互没问题,但当有类似以下情况出现时就需要进行编码再进行传输: 1.编码格式难以统一,导致数据交互过程出现中文乱码等问 ...
- 王小胖之 Base64编码/解码
使用场景:编码网址作为URL参数,简单编码或加密数据,下载地址生成或解析. 实现功能:BASE64在线编码和解码. 数据实例:王小胖好啊,王小胖顶呱呱!! ~~ english 123 !@#$%^& ...
- OpenSSL 使用 base64 编码/解码
简述 关于 OpenSSL 的介绍及安装请参见:Windows下编译OpenSSL 下面主要介绍有关 OpenSSL 使用 base64 编码/解码. 简述 编码解码 更多参考 编码/解码 #incl ...
随机推荐
- C# 录音和变调
一直想研究下录音 正好有个项目有机会使用一下强大的 NAudio (https://github.com/naudio/NAudio)库 录音 NAudio 录音类库 public class NAu ...
- 【已解决】ArcMap的界面如何恢复默认设置
解决方案:在C盘内搜索“Normal.mxt”,将它删除,然后重启ArcMap,即可. 效果图:
- Spring-Cloud之Zuul路由网关-6
一.为什么需要Zuul? Zuul 作为微服务系统的网关组件,用于构建边界服务( Edge Service ),致力于动态路由.过滤.监控.弹性伸缩和安全.Zuul 作为路由网关组件,在微服务架构中有 ...
- 如何让 height:100%; 起作用---父级元素必须设定高度
参考: http://www.webhek.com/post/css-100-percent-height.html https://www.cnblogs.com/kunmomo/p/1060066 ...
- 内部属性[[class]]
1. 对象的[[class]]属性 所有typeof返回值为“object”的对象(如数组)都包含一个内部属性[[class]],这个属性无法直接访问,一般通过Object.prototype.toS ...
- 十一、vue生命周期诠释--带图
Vue 实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列过程,我们称这是 Vue 的生命周期.通俗说就是 Vue 实例从创建到销毁的过程,就 ...
- tomcat将控制台输出定向到特定的文件中,并且一天一个文件
在bin目录的start.bat中,编辑: call "%EXECUTABLE%" start %CMD_LINE_ARGS% 改成: call "%EXECUTABLE ...
- MySQL存储过程01
过程:封装了若干条语句,调用时,这些封装体执行 函数:是一个由返回值的’过程‘ 过程是没有返回值的函数 我们把若干条sql封装起来,起个名字---过程 把此过程存储在数据库中------存储过程 存储 ...
- 团队第五次作业——Alpha2
一.相关信息 Q A 作业所属课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 作业要求 https: ...
- ReqMan — 需求提取和协同处理工具
ReqMan是由德国engineering method AG公司开发的一款高效的.可自由定制的需求提取和协同处理工具.ReqMan 能够将PDF.Word.Excel等格式的文档提取 ...