WorkerGlobalScope:btoa() 方法
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
io error: No such file or directory (os error 2) (/home/runner/work/yari/yari/mdn/translated-content/files/zh-cn/web/api/workerglobalscope/index.md)
WorkerGlobalScope
接口的 btoa()
方法可以将一个二进制字符串(例如,将字符串中的每一个字节都视为一个二进制数据字节)编码为 Base64 编码的 ASCII 字符串。
你可以使用这个方法来对可能遇到通信问题的数据进行编码,然后使用 WorkerGlobalScope.atob()
方法来对数据进行解码。例如,你可以对 ASCII 中的控制字符(值为 0 到 31 的字符)进行编码。
语法
btoa(stringToEncode)
参数
stringToEncode
-
一个需要编码的二进制字符串。
返回值
一个包含 stringToEncode
的 Base64 表示的 ASCII 字符串。
异常
InvalidCharacterError
DOMException
-
该字符串包含非单字节的字符。参见下方的“Unicode 字符串”。
示例
const encodedData = self.btoa("Hello, world"); // 编码字符串
const decodedData = self.atob(encodedData); // 解码字符串
Unicode 字符串
根据设计,Base64 仅将二进制数据作为其输入。而在 JavaScript 字符串中,这意味着每个字符只能使用一个字节表示。所以,如果你将一个字符串传递给 btoa()
,而其中包含了需要使用超过一个字节才能表示的字符,你就会得到一个错误,因为这个字符串不能被看作是二进制数据:
const ok = "a";
console.log(ok.codePointAt(0).toString(16)); // 61:占用 < 1 字节
const notOK = "✓";
console.log(notOK.codePointAt(0).toString(16)); // 2713:占用 > 1 字节
console.log(self.btoa(ok)); // YQ==
console.log(self.btoa(notOK)); // 错误
参见 Base64 术语条目中的“Unicode 问题”,以了解如何在处理任意 Unicode 文本时解决此限制。
规范
Specification |
---|
HTML Standard # dom-btoa-dev |
浏览器兼容性
BCD tables only load in the browser
参见
core-js
中有对btoa
的 polyfilldata
URLWorkerGlobalScope.atob()
Window.atob()
:相同的,但是是在窗口作用域内的方法。- Base64