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()生成的字符串

8c78a223cc6f734dcb17faa547c192c7.png

看起来很完美,不过在处理非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字符集非常容易处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值