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