首页  >  文章  >  web前端  >  为什么 Javascript 的 `atob` 无法正确解码 UTF-8 base64 字符串?

为什么 Javascript 的 `atob` 无法正确解码 UTF-8 base64 字符串?

DDD
DDD原创
2024-11-01 23:10:29379浏览

Why does Javascript's `atob` fail to decode UTF-8 base64 strings properly?

使用Javascript的atob解码base64不能正确解码utf-8字符串

Javascript的atob可以正确解码已经编码的base64字符串对于 ASCII 字符,例如 window.atob('YQ==') 将返回 ASCII 字符“a”。但是,它无法正确解码使用 UTF-8 Unicode 字符编码的 Base64 字符串,例如 window.atob('4pyTIMOgIGxhIG1vZGU=') 将返回 'ââ la mode' 而不是 '✓ à la mode' .

要正确解码使用 UTF-8 编码的 Base64 字符串,我们需要使用 escape 和 unescape 函数。在这种情况下,window.atob(unescape(encodeURIComponent('✓ à la mode'))) 将返回 '4pyTIMOgIGxhIG1vZGU=' 并且 window.atob('4pyTIMOgIGxhIG1vZGU=') 将返回 '✓ à la mode'。

处理传入的 base64 编码流以便将其解码为 utf-8 的另一个选项是使用 TextDecoder 类。此类提供了一种将 Base64 编码的字符串解码为 UTF-8 字符串的方法。以下是如何使用它的示例:

<code class="javascript">const text = '4pyTIMOgIGxhIG1vZGU=';
const decoder = new TextDecoder('utf-8');
const decodedText = decoder.decode(Uint8Array.from(atob(text)));
console.log(decodedText); // '✓ à la mode'</code>

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

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