Linux上的js解码,使用JavaScript实现Base64编码与解码

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

console.log(window.btoa(window.atob('yanggb')));

但是有些运行环境,比如nuxt的服务端环境没法使用window对象(window对象只有在浏览器的运行环境中才存在),所以需要自己实现一个Base64的编码解码功能,下面是用原生JavaScript实现该功能,可以作为一个常用工具使用。

UTF-8编码的函数

function utf8_encode (string) {

string = string.replace(/\r\n/g, '\n');

let utfText = '';

for (let n = 0; n < string.length; n++) {

let c = string.charCodeAt(n);

if (c < 128) {

utfText += String.fromCharCode(c);

} else if((c > 127) && (c < 2048)) {

utfText += String.fromCharCode((c >> 6) | 192);

utfText  += String.fromCharCode((c & 63) | 128);

} else {

utfText += String.fromCharCode((c >> 12) | 224);

utfText += String.fromCharCode(((c >> 6) & 63) | 128);

utfText += String.fromCharCode((c & 63) | 128);

}

}

return utfText;

}

UTF-8解码的函数

function utf8_decode (utfText) {

let string = "";

let i = 0;

let c = 0;

let c1 = 0;

let c2 = 0;

let c3 = 0;

while ( i < utfText.length ) {

c = utfText.charCodeAt(i);

if (c < 128) {

string += String.fromCharCode(c);

i++;

} else if((c > 191) && (c < 224)) {

c2 = utfText.charCodeAt(i+1);

string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));

i += 2;

} else {

c2 = utfText.charCodeAt(i+1);

c3 = utfText.charCodeAt(i+2);

string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));

i += 3;

}

}

return string;

}

Base64编码的函数

export const encode = (input) => {

let output = "";

let chr1, chr2, chr3, enc1, enc2, enc3, enc4;

let i = 0;

input = utf8_encode(input);

while (i < input.length) {

chr1 = input.charCodeAt(i++);

chr2 = input.charCodeAt(i++);

chr3 = input.charCodeAt(i++);

enc1 = chr1 >> 2;

enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);

enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);

enc4 = chr3 & 63;

if (isNaN(chr2)) {

enc3 = enc4 = 64;

} else if (isNaN(chr3)) {

enc4 = 64;

}

output = output +

input.charAt(enc1) + input.charAt(enc2) +

input.charAt(enc3) + input.charAt(enc4);

}

return output;

}

Base64解码的函数

export const decode = (input) => {

let output = "";

let chr1, chr2, chr3;

let enc1, enc2, enc3, enc4;

let i = 0;

input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

while (i < input.length) {

enc1 = input.indexOf(input.charAt(i++));

enc2 = input.indexOf(input.charAt(i++));

enc3 = input.indexOf(input.charAt(i++));

enc4 = input.indexOf(input.charAt(i++));

chr1 = (enc1 << 2) | (enc2 >> 4);

chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);

chr3 = ((enc3 & 3) << 6) | enc4;

output = output + String.fromCharCode(chr1);

if (enc3 != 64) {

output = output + String.fromCharCode(chr2);

}

if (enc4 != 64) {

output = output + String.fromCharCode(chr3);

}

}

output = utf8_decode(output);

return output;

}0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​如何让技术想法更容易被理解?

简介&#xff1a; 沟通说起来简单&#xff0c;要做好却很难。如何把复杂的技术问题通俗易懂地表达出来&#xff0c;让别人听懂&#xff0c;是每个技术人都会面临的难题。本文作者以自身经历为背景&#xff0c;总结技术人员在日常技术交流过程中&#xff0c;遇到的一些低效的技术…

大数据,凉了?

大数据被誉为“新石油”&#xff0c;如何管理并洞悉数据的价值&#xff0c;是企业未来发展的核心竞争力。进入大数据时代&#xff0c;数据规模与日俱增。另一方面&#xff0c;数据仓库的市场份额被其他技术蚕食&#xff0c;比如大数据、机器学习和人工智能。这种趋势给我们造成…

2021 年前端趋势预测

简介&#xff1a; 2021 哪些前端技术值得关注&#xff1f;来听听狼叔的分享。 知乎上&#xff0c;有人提问《2021前端会有什么新的变化&#xff1f;》 狼叔的回答二天超过6.1万阅读量&#xff0c;目前444个赞同&#xff0c;2个专业徽章&#xff0c;整体上看&#xff0c;这篇回答…

详解 Flink 容器化环境下的 OOM Killed

简介&#xff1a; 本文将解析 JVM 和 Flink 的内存模型&#xff0c;并总结在工作中遇到和在社区交流中了解到的造成 Flink 内存使用超出容器限制的常见原因。由于 Flink 内存使用与用户代码、部署环境、各种依赖版本等因素都有紧密关系&#xff0c;本文主要讨论 on YARN 部署、…

哈哈!TCP泄露了操作系统信息···

作者&#xff1a;轩辕之风O来源&#xff1a; 编程技术宇宙前言大家好&#xff0c;我是轩辕。前几天&#xff0c;我在读者群里提了一个问题&#xff1a;这一下&#xff0c;大家总算停止了灌水&#xff08;这群人都不用上班的&#xff0c;天天划水摸鱼&#xff09;&#xff0c;开…

android 自定义view控件,Android 自定义View——自定义View控件

Android给我们提供了大量的View控件&#xff0c;但这还是远远满足不了我们的要求&#xff0c;有时候开发所需要的控件形式是在Android提供的控件中是不存在&#xff0c;这就需要我们自己去定义一个。那么如何自定义控件&#xff1f;学习自定义控件&#xff0c;首先要先掌握Canv…

解读容器的 2020:寻找云原生的下一站

简介&#xff1a; “云原生”到底是什么&#xff1f;它就是容器和 Kubernetes 吗&#xff1f;虚拟机是云原生的吗&#xff1f;…… 2020 年注定是不凡的。它在阴霾中开始&#xff0c;在惊叹中结束&#xff0c;也让未来变得更加扑朔迷离。那么&#xff0c;容器与云原生的 2020 年…

如何用好云的弹性

简介&#xff1a; 如何用好云的弹性 1. 弹性为什么这么重要 做好弹性让IT能力轻松跟上用户的业务发展&#xff0c;做到多、快、好、省。 多&#xff1a;选择多&#xff0c;可以全球建站、机型选择也多、配套云服务也多。 快&#xff1a;部署快&#xff0c;自建IDC的建设时长以…

android笔试添加自定义服务,Android之Listview(item为单选题)自定义adapter,像考试时前面的10几道单选题的实现...

用于展现重复性的东西&#xff0c;Listview比较好用&#xff0c;看了别人的自定义Adapter(item是EditText&#xff0c;能够很好地获取到每一个item的EditText值)。又由于在做项目的需要&#xff0c;故特制了一个item包含RadioGroup的Listview的自定义Adapter。主要功能&#xf…

实现工具自由!开源的桌面工具箱

来源: HelloGitHubRubick,因为开源所有更自由在一切开始之前&#xff0c;首先要致敬 uTools&#xff01;如果没有它就没有 Rubick。大家好&#xff0c;我是“拉比克”&#xff08;Rubick&#xff09;项目的作者木偶。我做的 Rubick 是一款基于 Electron 的开源桌面工具箱&#…

测试一年多,上线就崩溃!微服务到底应该怎么测试?

简介&#xff1a; 只有了解风险&#xff0c;才能及时应对&#xff0c;保障服务高可用。 不久前&#xff0c;也就是11月16日&#xff0c;澳大利亚交易所&#xff08;Australian Securities Exchange, ASX&#xff09;上线了一个新的交易系统&#xff0c;但因为出现故障而被迫关闭…

阿里云熊鹰:基于融合、协同系统的边缘云原生架构演进和实践

简介&#xff1a; 云原生和边缘计算是近两年都非常火的技术话题了&#xff0c;在第十届云计算标准和应用大会上&#xff0c;阿里云高级技术专家熊鹰分享了《基于融合、协同系统的边缘云原生架构演进和实践》&#xff0c;希望通过介绍现在阿里云在边缘计算和边缘云原生这些技术领…

漫画:什么是 “建造者模式” ?

作者&#xff1a;东风玖哥来源&#xff1a; 程序员小灰————— 第二天 —————————————————首先&#xff0c;我们来定义一个Product类&#xff1a;public class Product {ArrayList<String> parts new ArrayList<String>();public void add(S…

阿里云云效何勉:云原生是“精益实践”的最佳助力

简介&#xff1a; 1月15日&#xff0c;国内知名“精益产品开发”研究和实践者、阿里云云效资深技术专家何勉在阿里云《云计算情报局》线上直播栏目中&#xff0c;分享其对研发新模式的最新思考&#xff0c;提出“下一代精益开发方法”&#xff0c;助力企业在研发效能上提升10倍…

开发效率提升15倍!批流融合实时平台在好未来的应用实践

简介&#xff1a; 本文由好未来资深数据平台工程师毛祥溢分享&#xff0c;主要介绍批流融合在教育行业的实践。内容包括两部分&#xff0c;第一部分是好未来在做实时平台中的几点思考&#xff0c;第二部分主要分享教育行业中特有数据分析场景。 1.背景介绍 好未来介绍 好未来是…

那些公司都配不上我,所以我选择创业

【CSDN 编者按】她&#xff0c;一个89年的农村姑娘&#xff0c;从种蘑菇到卖煤球&#xff0c;再到敲代码做云原生&#xff0c;成为企业创始人&#xff0c;一路走来她都经历了哪些困难与挑战&#xff0c;对于新生代程序员又有哪些建议&#xff1f;让我们一起来看看她是怎么说的。…

如何跑通第一个 SQL 作业

简介&#xff1a; 本文由阿里巴巴技术专家周凯波&#xff08;宝牛&#xff09;分享&#xff0c;主要介绍如何跑通第一个SQL。 一、SQL的基本概念 1.SQL 分类 SQL分为四类&#xff0c;分别是数据查询语言&#xff08;DQL&#xff09;、数据操纵语言&#xff08;DML&#xff09…

云原生DevOps的5步升级路径

简介&#xff1a; 究竟什么是云原生DevOps呢&#xff1f;我们认为&#xff1a;云原生DevOps是充分利用云原生基础设施&#xff0c;基于微服务/无服务架构体系和开源标准&#xff0c;语言和框架无关&#xff0c;具备持续交付和智能自运维能力&#xff0c;从而做到比传统DevOps更…

数据创新的四个陷阱

简介&#xff1a; 数据的重要性在当今已经无需在多言&#xff0c;所有的企业都意识到数据的重要性&#xff0c;都希望利用数据来驱动业务的发展。但是&#xff0c;很多企业信息化管理者依然存在对于数据智能&#xff0c;数据驱动的一些误解&#xff0c;这些误解会让企业的数据利…

Parallels 发布 Desktop 17版本,支持 Windows 11 和 macOS Monterey

Parallels Desktop 17 亮点速揽&#xff1a;性能提升&#xff0c;对图像效果加以改进、增强了 Windows 游戏体验&#xff0c;同时是全球首个在搭载 Apple M1 芯片的 Mac 上运行的 macOS Monterey 虚拟机&#xff0c;带来更为无缝的跨平台工作体验。 编辑 | 宋慧 头图 | Paralle…