js base64编码 java 解码_JavaScript字符串的Base64编码与解码

e104bdd4a03954ca0b7971c9c9b094ff.png

有时文本里包含一些不可打印的符号,而你需要把它们传输到服务器,这时我们会需要用到Base64编码。或者你需要把一个图片内容以文本格式嵌入到网页中,这时你也会用到 Base64 编码。

所谓 Base64 是一种基于64个可打印字符来表示二进制数据的方法,这些可打印字符包括字母 A-Z,a-z,数字0-9,+和/。此外等号=用作后缀用途。需要注意它的主要作用并非加密,而是编码数据方便传输。

7662886311be6bc9bc22acbf44b20007.png

为了讨论方便,本文将主要探讨在JavaScript中如何实现字符串的Base64编码和解码。

如果你经历过IE 6-9的“黑暗”时代,一定会觉得实现Base64编码/解码很繁琐。HTML 5的出现解救了我们,浏览器纷纷内置了原生的方法来支持这个功能:

btoa() – 根据提供的二进制字符串生成Base64编码后的ASCII字符串atob() – 解码btoa()生成的字符串

看起来很完美,不过在处理非ASCII字符时会报错,如下截图来自Chrome 83开发者工具:

6ea4ceee72d64c280260578d1fa9de84.png

原因

根据设计,Base64会以二进制数据作为处理对象。对于JavaScript字符串来说,这意味着其中的每个字符只能占用一个字节。如果调用btoa()时传入的字符串包含了占用多个字节的字符,那么会报错,因为这个字符串被认定为非二进制数据:

d92526a048581758c84acb095e60cf78.png

解决方案

1.转义所有扩展字符(不建议)

这个方案用了 escape 和 unescape,以及encodeURIComponent和decodeURIComponent来辅助编码/解码字符串。

f3454cacb13a47e1375e32548b51291e.png

由于escape()和unescape()函数已被废弃,虽然浏览器目前仍支持,不建议使用此方案。

2.在编码之前转义字符串(建议)

此方案用了正则表达式匹配替换功能

220bdcf311d2779ef50b51de38a58e58.png

要解码Base64字符串,需要这样做:

db54d8cae91a7624640f997b4e52895c.png

总结

Base64是一种广泛使用的编码方案,用于在网络上以ASCII字符流的形式安全传输二进制数据。

本文介绍了如何对JavaScript的UTF8编码的字符串进行编码和解码,特别是如何处理非ASCII字符。

当然,你仍然可以选择通过网络发送二进制数据。但有时这也有风险,因为并非所有的应用程序和网络通信设备都能处理原始二进制数据。而对于大多数应用程序来说,ASCII字符集非常容易处理。

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

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

相关文章

linux cmake 安装mysql5.5.11_以及更高版本_linux cmake 安装mysql5.5.11,以及更高版本

1、下载mysql5.5.12和cmakewgethttp://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.12-linux2.6-i686.tar.gzwget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz2、安装cmakemkdir /usr/local/cmake切换到存放cmake-2.8.4.tar.gz到目录tar zxvfcmake-2.8.4.tar.gzcd cm…

iOS中如何监测来电

http://blog.csdn.net/liujinlongxa/article/details/44207587转载于:https://www.cnblogs.com/it-k-50/p/6122844.html

maven 构建依赖树_Maven构建依赖项

maven 构建依赖树熟悉发行版和快照依赖关系的Maven和Gradle用户可能不了解TeamCity快照依赖关系,或者假定他们与Maven相关(这是不正确的)。 熟悉工件和快照相关性的TeamCity用户可能不知道,除了TeamCity提供的功能之外&#xff0c…

ssh图片上传 java_ssh上传并显示图片

struts部分:attribute"upfileForm"input"/upload/uploadfile.jsp"name"upfileForm"path"/upfile"scope"request"validate"true"type"com.yourcompany.struts.action.UpfileAction">publi…

安卓手机移动端页面为body设置overflow:hidden;不起作用

动态的改变body的样式,测试了可行 var scrollTop $("body").scrollTop();//body设置为fixed之后会飘到顶部,所以要动态计算当前用户所在高度 $("body").css({overflow:hidden,position: fixed,top: scrollTop*-1 }); $loadMask.css…

责任链设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 ! 目录 …

HDU 5944 Fxx and string(暴力/枚举)

传送门 Fxx and string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 1007 Accepted Submission(s): 422 Description Problem DescriptionYoung theoretical computer scientist Fxx get a string which co…

经典的java程序_Java经典程序

}}}-----------------结果:ABDCBDCB-----------------2.写出程序运行结果import java.lang.StringBuffer;public class Test2{public static void stringReplace(String str){str str.replace(j,i);}public static void bufferReplace(StringBuffer sbf){sbf sbf.…

继续OI

NOIP2016于2016.11.20日12:00正式结束。 我作为oi的生涯 或许会结束? 或者继续? 然而前途依然迷茫,我是否应该继?或是放弃? 距离省选还有3~4个月,我该何去何从? 虽然已经经历过联赛,…

java存储过程示例_安全密码存储–请勿做的事和Java示例

java存储过程示例安全存储密码的重要性 作为软件开发人员,我们最重要的职责之一就是保护用户的个人信息。 如果没有我们应用程序的技术知识,用户别无选择,只能相信我们正在履行这一责任。 令人遗憾的是,在密码方面,软件…

背包问题 贪心算法 java_JS基于贪心算法解决背包问题

前面我们分享了关于js使用贪心算法解决找零问题,本文我们接着为大家介绍JS基于贪心算法解决背包问题。贪心算法:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某…

Nginx配置proxy_pass

nginx配置proxy_pass,需要注意转发的路径配置 1、location /test/ { proxy_pass http://t6:8300; } 2、location /test/ { proxy_pass http://t6:8300/; } 上面两种配置,区别只在于proxy_pass转发的路径后是否带 “/” 针对情况1 如果访问url ht…

java代码耗尽内存_有关Java内存溢出及内存消耗的小知识

内存溢出原理:我们知道,Java程序本身是不能直接在计算机上运行的,它需要依赖于硬件基础之上的操作系统和JVM(Java虚拟机)。Java程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序。这个初始内存和最大内存在一定程度上会影响应用程…

简单一致的Log4j2 Logger命名

在带有Java 7方法句柄的可移植记录器名称一文中 ,我写了关于使用Java 7的方法句柄来命名类的记录器的文章。 我在那篇文章中说过,这种方法的优点包括记录器命名的一致性,避免了意外的代码复制和粘贴,这可能会导致将不同的类名用作…

第三周总结 类、对象、包

1.面向对象的特征有哪些?封装、继承、多态、(抽象)2.一个“.java”文件中是否可以有多个类(不是内部类)?有什么限制吗?可以有多个类,但是public的类只有一个,而且必须和j…

java服务器崩溃的原因_请求大神帮忙分析一下服务器崩溃原因

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼---- Minecraft Crash Report ----// Who set us up the TNT?Time: 14-6-11 上午12:52Description: Exception in server tick loopjava.lang.NoClassDefFoundError: scala/collection/Seqat java.lang.Class.forName0(Native Met…

VBA_Excel_教程:过程,函数

Sub s1()Debug.Print "s1"调用过程:无括号,加call提升可读性s2Call s2 End SubSub s2()Debug.Print "s2" End Sub 函数当过程用完全没有问题 Function f1()Debug.Print "f1"f2Call f2 End FunctionFunction f2()Debug.Pri…

java同步方法的特点_java多线程有哪些优点?同步实例代码展示

在我们的日常学习当中会发现java的知识点是总是息息相关的,可以串联起来。java中多线程的有关内容可以衍生出更多知识,它的优缺点也是非常明显的。你都了解吗?一起来看看吧。首先为大家介绍一下,多线程(多个线程同时运行)程序的优缺点优点&a…

使用JUnit规则进行干净的集成测试

JUnit Rules的优势,尤其是在进行集成测试时,几乎不能被高估。 在本文中,我们将阐明ExternalResource扩展的有用性。 在我们必须使用抽象外部资源的第三方库的情况下,这些简化了灯具控制。 作为示例,我们将看看如何基于…

FreeRTOS--API函数

FreeRTOS--API函数转载于:https://www.cnblogs.com/LittleTiger/p/6128708.html