首页  >  文章  >  web前端  >  为什么 JavaScript 中 `atob()` 无法解码 UTF-8 字符串?

为什么 JavaScript 中 `atob()` 无法解码 UTF-8 字符串?

Susan Sarandon
Susan Sarandon原创
2024-11-02 09:35:30292浏览

Why Does `atob()` Fail to Decode UTF-8 Strings in JavaScript?

使用 Javascript 的 atob 解码 Base64 无法正确解码 utf-8 字符串

JavaScript 中的 window.atob() 函数不能正确解码在处理占用超过一个字节的字符时,无法正确解码 UTF-8 字符串,从而导致生成 ASCII 编码的字符。

Unicode 问题

JavaScript 字符串被编码以 16 位为单位,btoa() 期望二进制数据作为输入。占用超过 1 个字节的字符(例如特殊字符或外来字符)不被视为二进制数据,并且在传递给 btoa() 时会触发错误。这个问题被称为“Unicode 问题”。

二进制互操作性解决方案

MDN 推荐的解决方案涉及对二进制字符串表示进行编码和解码。这保留了数据的二进制性质并消除了 Unicode 问题。编码过程涉及使用 Uint16Array 和 Uint8Array 将 UTF-8 字符串转换为二进制字符串。解码涉及将二进制字符串转换回 UTF-8 字符串。

具有 ASCII Base64 互操作性的解决方案

另一个解决方案是将 UTF-16 DOMString 转换为 8使用 Uint8Array 的位整数字符数组,然后使用 btoa() 对其进行编码。此方法保留 UTF-8 功能并生成可在支持 UTF-8 的平台上解码的纯文本 base64 字符串。解码涉及使用 atob() 和decodeURIComponent() 将 base64 字符串转换回 UTF-8 字符串。

已弃用的解决方案

以前使用的解决方案涉及使用 escape( ) 和 unescape() 函数,现已弃用。虽然此方法在现代浏览器中仍然有效,但不建议使用。

此外,值得注意的是,在使用 GitHub API 时,您可能需要在解码之前从 Base64 源中去除空格才能正常工作移动 Safari。

以上是为什么 JavaScript 中 `atob()` 无法解码 UTF-8 字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn