定义
btoa是JavaScript运行环境提供的一个全局函数,作用是接收一个二进制字符串,并返回该字符串的Base64表示形式[1]。它的语法形式为$btoa(stringToEncode)$,参数是需要编码的二进制字符串,返回值是一个只包含ASCII字符的字符串[2]。
这里所说的二进制字符串,指字符串中每一个字符都被当作一个数据字节来对待,也就是说每个字符的码位必须小于256[1]。在浏览器中它以window.btoa()的形式调用,在Web Worker中则以self.btoa()的形式出现,二者是同一方法在不同作用域下的形态[4]。
原理
Base64是一种把二进制数据映射为可打印字符的编码方式。btoa在接收到输入字符串后,按照编码规则把字节序列重新分组,输出由64个可打印字符组成的文本[5]。编码后数据体积会比原数据增大约三分之一,因为3个字节的输入被表示为4个字符[6]。
与之配对的atob执行相反方向的转换,把Base64字符串还原为原始形式[7]。两者名字中的字母含义偏向历史用法:b指字符串被视为二进制(binary)数据,a指输出或输入属于ASCII文本,并非指Base64的b[5]。
flowchart LR
A[原始二进制字符串] --> B[btoa 编码]
B --> C[Base64 ASCII 字符串]
C --> D[atob 解码]
D --> A
发展历程
btoa与atob的名字并非JavaScript原创,而是沿用了Unix系统中的同名命令,其中btoa是一个把二进制文件转换为ASCII文本以便传输的过滤器,其手册页对它的描述为“binary to ascii conversion”[3]。
JavaScript的创建者布兰登·艾克(Brendan Eich)曾说明,这两个名字是从Unix进入网景公司的代码库,他在1995年将其映射到了JavaScript中[3]。后来HTML规范把Base64工具方法纳入标准化范围,规定了atob与btoa的行为[8]。
从2015年7月起,主流浏览器均已提供该特性,它被列为成熟且广泛可用的功能[2]。
应用
btoa的主要用途是把可能造成通信问题的数据先行编码,再通过网络传输,接收方用atob还原[1]。控制字符就是典型例子,例如ASCII值0到31这些不可打印字符,直接传输容易出现问题[2]。
在Web开发中,Base64编码常被用来在统一资源定位符、Cookie、层叠样式表以及脚本代码中安全地携带少量二进制数据[9]。此外,借助文件读取接口与fetch接口,还可以在网页平台内完成字节数组与Base64数据地址之间的异步转换[1]。
在JavaScript中实现Base64编码存在多种选择:除内置的btoa与atob之外,还可以使用第三方库或Node.js运行环境中的缓冲区类[9]。如果待处理的数据本身存放在字节数组中,也可以考虑改用数组类型自带的编码方法,避免先构造含原始字节的字符串[2]。
局限
btoa不能直接处理包含多字节字符的字符串。JavaScript中的字符串以UTF-16编码,当传入含有码位超过255的字符时,函数会抛出InvalidCharacterError异常[1]。表情符号、部分汉字与其他非拉丁字符都会触发这类错误[7]。
要编码任意Unicode文本,必须先把字符串转换为其UTF-8字节表示,再对这些字节进行编码[2]。常见的做法是先用文本编码器(TextEncoder)得到字节数组,再把每个字节当作码位拼成字符串交给btoa处理;解码时反向操作[7]。
这类变通方案在遇到孤立的代理码元时可能不会报错,但会在往返过程中把原字符静默替换为替换字符,导致输入与输出不一致[7]。另外,Base64本身只是一种编码方式,并不提供保密功能,编码结果可被任何人还原[6]。
参见
-
Base64 —— btoa所实现的编码方案,把二进制数据表示为可打印文本。
-
atob —— 与btoa配对的解码函数,把Base64字符串还原为原始数据。
-
JavaScript —— btoa最初被引入并主要使用的程序设计语言。
-
UTF-8 —— btoa处理非ASCII字符时需要先转换到的字符编码。
-
数据地址 —— 以Base64形式内嵌资源的统一资源标识符方案。
参考资料
- Window: btoa() method [引用日期2026-10-14]
- Window: btoa() 方法 [引用日期2026-10-14]
- Why were Javascript `atob()` and `btoa()` named like that? [引用日期2026-10-14]
- WorkerGlobalScope:btoa() 方法 - Web API | MDN [引用日期2026-10-14]
- print(PDF) [引用日期2026-10-14]
- atob和btoa的趣谈 原 [引用日期2026-10-14]
- base64-encoding [引用日期2026-10-14]
- w3c-windowbase64 [引用日期2026-10-14]
- JavaScript中的Base64编码:三种实现方式及多场景应用分析 [引用日期2026-10-14]