使用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 字符串的方法。下面是如何使用它的示例:
const text = '4pyTIMOgIGxhIG1vZGU=';
const decoder = new TextDecoder('utf-8');
const decodedText = decoder.decode(Uint8Array.from(atob(text)));
console.log(decodedText); // '✓ à la mode'
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3