JavaScript 使用 btoa 和 atob 进行 Base64 转码与解码

作者:木棉时间:2026-10-21 23:52:51浏览:583

本文介绍 JavaScript 原生 API btoa 和 atob 的 Base64 编码与解码用法。btoa 仅支持 Latin1 字符,直接编码含汉字的字符串会报错。通过结合 encodeURIComponent 和 decodeURIComponent 可解决中文乱码问题,适用于 HTML5 文件处理、Canvas 截图等场景。

JavaScript Base64 编码背景与应用

JavaScript 原生 API 内置了 Base64 支持,尽管早期受限于 JavaScript 的功能局限,Base64 的应用场景较为有限。随着 HTML5 标准的正式确立,Base64 的应用前景大幅拓展,如今可广泛应用于 FileReader API、拖拽上传以及 Canvas 和 Video 截图等 HTML5 功能中。

接下来介绍 Base64 转码与解码的具体实现方法。

btoa 与 atob 基础转码

首先探讨如何在 JavaScript 中执行 Base64 转码操作。


var str = 'javascript';

window.btoa(str)
//转码结果 "amF2YXNjcmlwdA=="

window.atob("amF2YXNjcmlwdA==")
//解码结果 "javascript"

Unicode 字符与中文编码处理

需要注意的是,Base64 转码的对象必须为字符串,这导致其对非字符串数据的处理存在局限。特别需要关注的是 Unicode 字符的转码问题。


var str = "China,中国"
window.btoa(str)

执行 btoa 时若包含非 Latin1 范围内的字符,会抛出错误:Uncaught DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.

显然,直接编码包含汉字的字符串无法成功,需要寻找支持汉字的方法。

此时可以使用 window.encodeURIComponent 和 window.decodeURIComponent 来解决编码问题。


var str = "China,中国";
window.btoa(window.encodeURIComponent(str))
//"Q2hpbmElRUYlQkMlOEMlRTQlQjglQUQlRTUlOUIlQkQ="

window.decodeURIComponent(window.atob('Q2hpbmElRUYlQkMlOEMlRTQlQjglQUQlRTUlOUIlQkQ='))
//"China,中国"

btoa 与 atob 的基本使用方法如上所示,大家可以尝试实践。希望本文内容能对大家的编程学习或工作有所帮助,感谢支持。

作者最新文章