前端开发必备:深入理解btoa和atob函数
创作时间:
作者:
@小白创作中心
前端开发必备:深入理解btoa和atob函数
引用
CSDN
等
8
来源
1.
https://blog.csdn.net/qq_36380426/article/details/138174248
2.
https://blog.csdn.net/weixin_44283589/article/details/132165045
3.
https://cloud.baidu.com/article/3320935
4.
https://blog.csdn.net/carcarrot/article/details/100705946
5.
https://www.zhangxinxu.com/wordpress/2018/08/js-base64-atob-btoa-encode-decode/comment-page-1/
6.
https://www.cnblogs.com/djane/articles/10857826.html
7.
https://my.oschina.net/emacs_8600208/blog/16740193
8.
https://www.cnblogs.com/ziChin/p/17897499.html
在前端开发中,btoa 和 atob 是两个非常实用的全局函数,主要用于处理 Base64 编码和解码。它们在数据传输、存储以及安全场景中发挥重要作用。本文将深入解析这两个函数的使用方法、应用场景以及注意事项。
基本功能与使用
btoa 和 atob 的名称和功能可以这样理解:
函数名 | 全称 | 输入 → 输出 | 作用 |
|---|---|---|---|
btoa | Binary to ASCII | 二进制字符串 → Base64 字符串 | 编码 |
atob | ASCII to Binary | Base64 字符串 → 二进制字符串 | 解码 |
基本用法示例
const text = "Hello, world!";
const base64Text = btoa(text); // "SGVsbG8sIHdvcmxkIQ=="
const decodedText = atob(base64Text); // "Hello, world!"
实际应用场景
1. 数据传输
在不支持二进制数据的系统之间传输数据时,可以使用 Base64 编码。例如,在 WebSocket 中传输音频数据:
// 发送音频数据前编码
const audioData = new Uint8Array([...]);
const base64Audio = btoa(String.fromCharCode(...audioData));
socket.send(base64Audio);
// 接收后解码
socket.onmessage = (event) => {
const binaryData = atob(event.data);
const audioBlob = new Blob([binaryData], {type: 'audio/mpeg'});
// 播放音频
};
2. 图片数据处理
可以直接在 HTML 中嵌入 Base64 编码的图片:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot">
3. 跨域通信
在需要绕过浏览器的同源策略时,可以使用 Base64 编码来传输数据。
Unicode 字符处理
btoa 不能直接处理 Unicode 字符,比如中文。需要先进行 URI 编码:
// 错误用法(直接编码中文会报错)
btoa("中文"); // ❌ 报错:InvalidCharacterError
// 正确做法:先转码
function utf8ToBase64(str) {
return btoa(unescape(encodeURIComponent(str)));
}
function base64ToUtf8(base64) {
return decodeURIComponent(escape(atob(base64)));
}
utf8ToBase64("你好"); // "JUU0JUJEJUEwJUU1JUE1JUJE"
base64ToUtf8("JUU0JUJEJUEwJUU1JUE1JUJE"); // "你好"
性能优化
对于大文件,可以采用分块处理的方式避免内存溢出:
async function encodeLargeFile(file) {
const chunkSize = 1024 * 1024; // 1MB
let offset = 0;
while (offset < file.size) {
const chunk = file.slice(offset, offset + chunkSize);
const arrayBuffer = await chunk.arrayBuffer();
const base64Chunk = btoa(String.fromCharCode(...new Uint8Array(arrayBuffer)));
// 发送或存储 base64Chunk
offset += chunkSize;
}
}
兼容性解决方案
btoa 和 atob 在 IE10+ 及所有现代浏览器中都支持。对于 IE8/IE9,可以使用 polyfill:
<!--[if IE]>
<script src="./base64-polyfill.js"></script>
<![endif]-->
或者提供替代实现:
if (!window.atob) {
window.atob = function(encodedString) {
// 替代实现代码
};
}
总结对比表
特性 | btoa | atob |
|---|---|---|
方向 | 编码 → Base64 | 解码 → 原始数据 |
输入类型 | 二进制字符串 | Base64 字符串 |
Unicode 支持 | 需手动转码(UTF-8 → 字节) | 需手动转码(字节 → UTF-8) |
适用场景 | 文本/二进制数据的文本化传输 | 还原编码后的数据 |
浏览器兼容性 | 所有现代浏览器 | 所有现代浏览器 |
通过本文的介绍,相信你已经掌握了 btoa 和 atob 的使用方法和注意事项。在实际开发中,合理运用这两个函数,可以让你的数据处理更加高效和灵活。
热门推荐
上海首推生命晶石殡葬:体积减九成,价格降九成
从酒泉到乌市:丝绸之路精华景点全攻略
牛肉价格狂跌,养牛不如去打工?
来内蒙古,什么特产值得带?当地人推荐这10种,都是地理标志产品
小到没有公交的山西县城,“国保”遍地
独生子女父母光荣证办理指南:3步7天免费领取
哪些食物搭配会让宠物营养不良越来越瘦
如何培养良好生活习惯?健康生活方式的关键在哪里?
IFF华盛顿会议:国际组织亟需改革,新兴市场国家和私营部门应有更多话语权
首届全国健身气功大赛在绍兴举行,24支队伍角逐七大赛区冠军
道医炁功龙虎功详解:每天30分钟,调和身心
气功调理:调和身心、舒缓压力的五大健康益处
画册设计费用详解:四大环节把控实现降本增效
高情商聊天术:情感管理的秘密武器
北宫雨泽教你聊天赢芳心
重庆:人行涵洞蓄水养鱼,交通执法部门紧急联合处置
猫咪肠梗阻全攻略:12种诱因识别与预防
科学应对猫咪肠梗阻:两种治疗方案及预防要点
猫咪肠梗阻:识别症状与科学防治指南
2分钟一张葱油饼,放3天也不硬,柔软多层,今天你吃了没
五步教你炸出美味油饼,没有任何添加剂安全放心
大油饼的家常做法,和面烙饼详细讲解,柔软多层,全家老少都爱吃
机器学习中的主成分分析(PCA)与特征提取
AIGC与劳动力市场:技术进步与就业结构的重塑
梅州“梅江八景”精华游:2天2晚玩转世界客都人文自然
“世界客都”梅州春节攻略:八县区民俗活动与特色美食指南
报告:80%的工作岗位将在未来三年内因AI改变
梅州:文创IP引领文旅发展,游客收入双增长
核酸检测最准,疫苗最有效:专家解读甲流防治要点
广东疾控:甲流进入冬季流行期,春运期间需加强防护