使用 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中文网其他相关文章!