使用Javascript的atob解碼base64不能正確解碼utf-8字串
Javascript的atobbase可以正確解碼已經編碼的字串64對於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中文網其他相關文章!