btoa

关注
义项:Base64编码函数
btoa

btoa是Web平台提供的一个Base64编码函数,属于浏览器窗口对象(Window)与WorkerGlobalScope接口的方法,用于把一个二进制字符串转换成Base64编码的ASCII字符串[1]。它常与负责反向解码的atob函数配合使用,以便把可能引起通信问题的数据转为可安全传输的文本,例如ASCII值0到31的控制字符[2]。名称源自Unix系统中的同名命令,其中b可理解为二进制(binary)、a可理解为ASCII[3]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

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形式内嵌资源的统一资源标识符方案。

参考资料

  1. Window: btoa() method [引用日期2026-10-14]
  2. Window: btoa() 方法 [引用日期2026-10-14]
  3. Why were Javascript `atob()` and `btoa()` named like that? [引用日期2026-10-14]
  4. WorkerGlobalScope:btoa() 方法 - Web API | MDN [引用日期2026-10-14]
  5. print(PDF) [引用日期2026-10-14]
  6. atob和btoa的趣谈 原 [引用日期2026-10-14]
  7. base64-encoding [引用日期2026-10-14]
  8. w3c-windowbase64 [引用日期2026-10-14]
  9. JavaScript中的Base64编码:三种实现方式及多场景应用分析 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:4 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:38:25Z

历史版本

本条目引用的词条
Base64 atob JavaScript UTF-8 数据地址