Js对字符串进行base64编码和解码,中文报错:Failed to execute ‘btoa‘ on ‘Window‘: The string to be encoded contains cha
我最早使用的是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相关推荐
- js base64解码JWT失败:VM273:1 Uncaught DOMException: Failed to execute 'atob' on 'Window': The string to
前端获取后端服务生成JWT,利用js方法base64解码payload段: window.atob("eyJzdWIiOiJ0ZXN0MyIsInVzZXJJZCI6IjEwMTY5MiIs ...
- base64编码和解码的js工具函数
上代码 // 使用 const base64 = new Base64Code() const str = '你好' const en = base64.enCode(str) const de = ...
- Linux上的js解码,使用JavaScript实现Base64编码与解码
我们知道,浏览器的window对象提供有window.atob()和window.btoa()方法可以对字符串进行Base64编码和解码. console.log(window.btoa(window ...
- Java、JS、OC、Flutter的Base64编码和解码
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. ** 你可能需要 CSDN 网易云课堂教程 掘金 EDU学院教程 知乎 Flutter系列文章 本文章将描述在 Jav ...
- 用 JS 进行 Base64 编码、解码
从IE10+浏览器开始,所有浏览器就原生提供了 Base64 编码.解码方法,不仅可以用于浏览器环境,Service Worker 环境也可以使用. 方法名就是 atob 和 btoa ,具体语法如下 ...
- js php base64,JavaScript实现Base64编码与解码的代码详解
本篇文章给大家分享的是jJavaScript实现Base64编码与解码的代码详解,内容挺不错的,希望可以帮助到有需要的朋友 一.加密解密方法使用//1.加密 var str = '124中文内容'; ...
- java解码base64的png图片_使用PHP对图片进行base64编码和解码(png、jpg,声音、视频)...
为什么要对图片base64编码 base64是网络上最常见的传输8Bit字节代码的编码方式之一.base64主要不是加密,它主要的用途是把一些二进制数转成普通字符用于网络传输.由于一些二进制字符在传输 ...
- Python 对图像进行base64编码及解码读取为numpy、opencv、matplot需要的格式
Python 对图像进行base64编码及解码读取为numpy.opencv.matplot需要的格式 1. 效果图 2. 源码 参考 这篇博客将介绍Python如何对图像进行base64编解码及读取 ...
- golang中base64编码_MySQL中如何将字符串转为base64编码?
点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网 源 / www.php.cn 在MySQL中,TO_BASE64()函数将字符串转换为以base-64编码的字符串并返回结 ...
最新文章
- php web框架 symfony简介
- WPF 路由事件初步
- HDOJ - 4474 简单分析后,BFS
- ASP.NET MVC中如何实现页面跳转
- 腾讯----小Q的歌单
- MCI:移动持续集成在大众点评的实践
- 怎么在表格中转换html格式,图解Excel与Html格式之间的互相转换
- linux kernel 下的hash 和链表 应用
- 怎样备份和恢复SAV企业版服务器的设置
- **无人机水平方向四环串级控制,竖直方向三环串级控制
- word插入图片被文字挡住
- 微信开放平台(公众号)API学习笔记(1)-公众号测试账户
- 树莓派4B 编译安装rtl8192eu usb网卡驱动
- C#使用公共语言拓展(CLE)调用Python3(使用TensorFlow训练的模型)
- 【动手学习深度学习笔记】
- 虚拟机配置及系统加固
- TTFB-首字节时间简介
- 电脑的网络,一会通一会不通,一般是IP冲突
- XX项目的现状与对策
- java fx scene builder_JavaFX开发工具之JavaFX Scene Builder
热门文章
- 【服装设计作品集】珠宝设计转服装设计?走那条未被众人选择的路
- 验证手机,电话的正则表达式(11位手机号,4位区号,3位区号,7位或者8位手机号码)...
- 【AD】如何导入3D封装
- 专题分纲目录 思维模型
- mysql主从复制的配置方法和原理简介
- 【近万字干货】别让你的简历配不上你的才华——手把手教你制作最适合你的简历
- 还记得这首是什么歌吗?
- 37行代码实现一个简单的打游戏AI
- error while decoding MB 38 35, bytestream -7 concealing 55 DC, 55 AC, 55 MV errors in P frame
- 创建 AR / VR / CG 领域专业词库