我最早使用的是atob和btoa这两个函数,但是会出现报错。

直接使用封装好的方法:

/*** 编码base64*/
function Encode64(str) {return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,function toSolidBytes(match, p1) {return String.fromCharCode('0x' + p1);}));
}
/**
* 解码base64
*/
function Decode64(str) {return decodeURIComponent(atob(str).split('').map(function (c) {return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);}).join(''));
}

btoa 和 atob 是window对象的两个函数,其中:

btoa :是binary to ascii,用于将binary的数据用ascii码表示,即Base64的编码过程
atob:是ascii to binary,用于将ascii码解析成binary数据,即Base64的解码过程。

binary to ascii,用于将ascii字符串二进制数据转换成一个base64编码过的字符串表示,即Base64的编码过程,常用于编码字符串

var str = "hello world";var demo = btoa(str);console.log(demo);// aGVsbG8gd29ybGQ=

btoa不能编辑Unicode字符

var str = "好好学习";var demo = btoa(str);console.log(demo);

上面操作,此时会报错,翻译过来就是:无法在“Window”上执行“btoa”:要编码的字符串包含超出 Latin1 范围的字符

4、Unicode字符编码
刚才上面的例子中我们想对Unicode字符编码进行编码,直接使用btoa不行的,所以我们使用encodeURIComponent和decodeURIComponent方法。

因为 btoa 仅支持 ASCII 字符序列,如所以我们要先使用 encodeURIComponent ,将中文字符编码转变成ASCII字符序列

编码时,先用encodeURIComponent对字符串进行编码,再用btoa进行Base64编码;
解码时,先用atob对Base64编码的串进行解码,再用decodeURIComponent对字符串进行解码

注意:

编码的过程:Unicode字符 -------> 先encodeURI -------> 再btoa编码
解码的过程:先atob解码 -------> 再decodeURI -------> Unicode字符

var str = "好好学习";var demo = btoa(encodeURIComponent(str));console.log(demo);//JUU1JUE1JUJEJUU1JUE1JUJEJUU1JUFEJUE2JUU0JUI5JUEw
var demo = 'JUU1JUE1JUJEJUU1JUE1JUJEJUU1JUFEJUE2JUU0JUI5JUEw'var str1 = decodeURIComponent(atob(demo))console.log(str1)//好好学习

不过虽然到达了曲线救国的目的,但是由于 encodeURIComponent 和 decodeURIComponent 已经达到了转义控制字符的目的,使用 atob 和 btoa 感觉是多此一举。

Js对字符串进行base64编码和解码,中文报错:Failed to execute ‘btoa‘ on ‘Window‘: The string to be encoded contains cha相关推荐

  1. js base64解码JWT失败:VM273:1 Uncaught DOMException: Failed to execute 'atob' on 'Window': The string to

    前端获取后端服务生成JWT,利用js方法base64解码payload段: window.atob("eyJzdWIiOiJ0ZXN0MyIsInVzZXJJZCI6IjEwMTY5MiIs ...

  2. base64编码和解码的js工具函数

    上代码 // 使用 const base64 = new Base64Code() const str = '你好' const en = base64.enCode(str) const de = ...

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

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

  4. Java、JS、OC、Flutter的Base64编码和解码

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. ** 你可能需要 CSDN 网易云课堂教程 掘金 EDU学院教程 知乎 Flutter系列文章 本文章将描述在 Jav ...

  5. 用 JS 进行 Base64 编码、解码

    从IE10+浏览器开始,所有浏览器就原生提供了 Base64 编码.解码方法,不仅可以用于浏览器环境,Service Worker 环境也可以使用. 方法名就是 atob 和 btoa ,具体语法如下 ...

  6. js php base64,JavaScript实现Base64编码与解码的代码详解

    本篇文章给大家分享的是jJavaScript实现Base64编码与解码的代码详解,内容挺不错的,希望可以帮助到有需要的朋友 一.加密解密方法使用//1.加密 var str = '124中文内容'; ...

  7. java解码base64的png图片_使用PHP对图片进行base64编码和解码(png、jpg,声音、视频)...

    为什么要对图片base64编码 base64是网络上最常见的传输8Bit字节代码的编码方式之一.base64主要不是加密,它主要的用途是把一些二进制数转成普通字符用于网络传输.由于一些二进制字符在传输 ...

  8. Python 对图像进行base64编码及解码读取为numpy、opencv、matplot需要的格式

    Python 对图像进行base64编码及解码读取为numpy.opencv.matplot需要的格式 1. 效果图 2. 源码 参考 这篇博客将介绍Python如何对图像进行base64编解码及读取 ...

  9. golang中base64编码_MySQL中如何将字符串转为base64编码?

    点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网      源 / www.php.cn 在MySQL中,TO_BASE64()函数将字符串转换为以base-64编码的字符串并返回结 ...

最新文章

  1. php web框架 symfony简介
  2. WPF 路由事件初步
  3. HDOJ - 4474 简单分析后,BFS
  4. ASP.NET MVC中如何实现页面跳转
  5. 腾讯----小Q的歌单
  6. MCI:移动持续集成在大众点评的实践
  7. 怎么在表格中转换html格式,图解Excel与Html格式之间的互相转换
  8. linux kernel 下的hash 和链表 应用
  9. 怎样备份和恢复SAV企业版服务器的设置
  10. **无人机水平方向四环串级控制,竖直方向三环串级控制
  11. word插入图片被文字挡住
  12. 微信开放平台(公众号)API学习笔记(1)-公众号测试账户
  13. 树莓派4B 编译安装rtl8192eu usb网卡驱动
  14. C#使用公共语言拓展(CLE)调用Python3(使用TensorFlow训练的模型)
  15. 【动手学习深度学习笔记】
  16. 虚拟机配置及系统加固
  17. TTFB-首字节时间简介
  18. 电脑的网络,一会通一会不通,一般是IP冲突
  19. XX项目的现状与对策
  20. java fx scene builder_JavaFX开发工具之JavaFX Scene Builder

热门文章

  1. 【服装设计作品集】珠宝设计转服装设计?走那条未被众人选择的路
  2. 验证手机,电话的正则表达式(11位手机号,4位区号,3位区号,7位或者8位手机号码)...
  3. 【AD】如何导入3D封装
  4. 专题分纲目录 思维模型
  5. mysql主从复制的配置方法和原理简介
  6. 【近万字干货】别让你的简历配不上你的才华——手把手教你制作最适合你的简历
  7. 还记得这首是什么歌吗?
  8. 37行代码实现一个简单的打游戏AI
  9. error while decoding MB 38 35, bytestream -7 concealing 55 DC, 55 AC, 55 MV errors in P frame
  10. 创建 AR / VR / CG 领域专业词库