当前位置: 首页 > news >正文

window.atob()与window.btoa()方法实现编码与解码

window.atob() 与window.btoa()

WindowBase64.atob() 函数用来解码一个已经被base-64编码过的数据。你可以使用 window.btoa() 方法来编码一个可能在传输过程中出现问题的数据,并且在接受数据之后,使用 window.atob() 方法来将数据解码。例如:你可以把ASCII里面数值0到31的控制字符进行编码,传输和解码。

window.btoa():将ascii字符串或二进制数据转换成一个base64编码过的字符串,该方法不能直接作用于Unicode字符串.

语法:

var decodedData = window.atob(encodedData);

例子:

var encodedData = window.btoa("Hello, world"); // 编码
var decodedData = window.atob(encodedData); // 解码

其兼容性是主流浏览器,IE10及以上。

Unicode 字符串

在各浏览器中,使用 window.btoa 对Unicode字符串进行编码都会触发一个字符越界的异常.

先把Unicode字符串转换为UTF-8编码,可以解决这个问题, 代码来自Johan Sundstr?m:

function utf8_to_b64( str ) {
    return window.btoa(unescape(encodeURIComponent( str )));
}

function b64_to_utf8( str ) {
    return decodeURIComponent(escape(window.atob( str )));
}

// Usage:
utf8_to_b64('? à la mode'); // "4pyTIMOgIGxhIG1vZGU="
b64_to_utf8('4pyTIMOgIGxhIG1vZGU='); // "? à la mode"
//译者注:在js引擎内部,encodeURIComponent(str)相当于escape(unicodeToUTF8(str))
//所以可以推导出unicodeToUTF8(str)等同于unescape(encodeURIComponent(str))

decodeURIComponent() 与encodeURIComponent()

这里用到了encodeURIComponent()与decodeURIComponent()方法,下面简单介绍下:

decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。

下面给个例子:

<script type="text/javascript">

var test1="http://www.w3school.com.cn/My first/"

document.write(encodeURIComponent(test1)+ "<br />")
document.write(decodeURIComponent(test1))

</script>

输出的结果:

http%3A%2F%2Fwww.w3school.com.cn%2FMy%20first%2F
http://www.w3school.com.cn/My first/

 

下个例子, encodeURIComponent() 对 URI 进行编码:

<script type="text/javascript">

document.write(encodeURIComponent("http://www.w3school.com.cn"))
document.write("<br />")
document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/"))
document.write("<br />")
document.write(encodeURIComponent(",/?:@&=+$#"))

</script>

输出结果:

http%3A%2F%2Fwww.w3school.com.cn
http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F
%2C%2F%3F%3A%40%26%3D%2B%24%23

 

关于encodeURIComponent()与decodeURIComponent()的参考地址:

JavaScript decodeURIComponent() 函数与JavaScript encodeURIComponent() 函数

 

 escape() 与unescape() 方法

escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。

语法:escape(string)

返回值:已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。

说明:该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。

 参考地址:https://developer.mozilla.org/zh-CN/docs/Web/API/WindowBase64/btoa

https://developer.mozilla.org/zh-CN/docs/Web/API/WindowBase64/atob

http://www.w3school.com.cn/jsref/jsref_escape.asp

相关文章:

  • 让我们在户外撒点野 新疆微软.net俱乐部2006年6月户外技术交流活动报道
  • mysql5.6传统复制改为基于GTID多线程复制
  • linux环境内存分配原理 mallocinfo【转】
  • My Frist in this frist!!
  • Linux 添加Nginx 到 service 启动
  • 加点自已内容的新内核下L7-FILTER的应用实例!
  • 第2章 Selenium2-java 测试环境搭建
  • 編寫高性能 Web 應用程式的 10 個技巧
  • 自定义串口通信协议的实现
  • 和小妞小思宇一起吃饭了
  • lepus数据库实时开源监控系统
  • 电信行业解决方案
  • MySQL主主同步
  • 克服惰性,多尝试
  • sui mobile 与jquery混合使用?
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 0基础学习移动端适配
  • Angular 响应式表单 基础例子
  • const let
  • HTTP中GET与POST的区别 99%的错误认识
  • JavaScript异步流程控制的前世今生
  • JAVA并发编程--1.基础概念
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Linux快速复制或删除大量小文件
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • overflow: hidden IE7无效
  • Python爬虫--- 1.3 BS4库的解析器
  • Python中eval与exec的使用及区别
  • springMvc学习笔记(2)
  • windows下使用nginx调试简介
  • yii2中session跨域名的问题
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 开源地图数据可视化库——mapnik
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 面试总结JavaScript篇
  • 区块链分支循环
  • 如何设计一个微型分布式架构?
  • 一起参Ember.js讨论、问答社区。
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • #if 1...#endif
  • #laravel 通过手动安装依赖PHPExcel#
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • ( 10 )MySQL中的外键
  • (C语言)逆序输出字符串
  • (HAL库版)freeRTOS移植STMF103
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (二)linux使用docker容器运行mysql
  • (二)springcloud实战之config配置中心
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (七)Knockout 创建自定义绑定