首頁  >  文章  >  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的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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn