阅读 84

浏览器中的原生base64方法

在web开发中,经常涉及到对文本、文件等进行base64编码处理,在之前的开发中,使用js-base64来进行处理,但其实浏览器已经原生包含了处理方法。性能更好,兼容性也更高。

atob() - ASCII to Binary

base64编码的ASCII字符串转为二进制字符串

语法:

  1. // 浏览器上下文中

  2. var encodeData = window.btoa(someString)

  3. // js Worker 线程

  4. var encodeData = self.btoa(someString)

示例:

  1. window.btoa('someString')

  2. // 返回 c29tZVN0cmluZw==

btoa() - Binary to ASCII

二进制数据字符串转为base64编码的ASCII字符串

语法:

  1. // 浏览器上下文中

  2. var decodeData = window.atob(someString)

  3. // js Worker 线程

  4. var decodeData = self.atob(someString)

示例:

  1. window.atob('c29tZVN0cmluZw==')

  2. // 返回 someString

中文内容的处理

如果直接编码中文,会出现报错

  1. window.btoa('一些字符串')

报错:

因为很明显中文超出了Latin1的语言集范围

Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。

中文内容的二次编码

  1. btoa(encodeURIComponent('一些字符串'))

  2. // 返回 JUU0JUI4JTgwJUU0JUJBJTlCJUU1JUFEJTk3JUU3JUFDJUE2JUU0JUI4JUIy

  3. decodeURIComponent(atob('JUU0JUI4JTgwJUU0JUJBJTlCJUU1JUFEJTk3JUU3JUFDJUE2JUU0JUI4JUIy'))

  4. // 返回 一些字符串

中文内容的三次编码

二次编码的问题是字母全部为大写,且转换后字符串长度比较长,这个问题通过使用escape三次编码可以解决,长度更短更美观

  1. btoa(unescape(encodeURIComponent('一些字符串')))

  2. // 返回 5LiA5Lqb5a2X56ym5Liy

  3. decodeURIComponent(escape(atob('5LiA5Lqb5a2X56ym5Liy')))

  4. // 返回 一些字符串

兼容性

文件的base64编码

借助FileReader对象和readAsDataURL方法,我们可以把任意文件转为Base64 Data-URI。假设我们的文件对象是file,则转换的JavaScript代码如下:

  1. var reader = new FileReader();

  2. reader.onload = function(e) {

  3.  // e.target.result就是该文件的完整Base64 Data-URI

  4. };

  5. reader.readAsDataURL(file);


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐