使用Javascript 的atob 解碼Base64 無法正確解碼utf-8 字串
JavaScript 中的window.atob() 函數不能正確解碼在處理佔用超過一個位元組的字元時,無法正確解碼UTF-8 字串,從而導致產生ASCII 編碼的字元。
Unicode 問題
JavaScript 字串被編碼以 16 位元為單位,btoa() 期望二進位資料作為輸入。佔用超過 1 個位元組的字元(例如特殊字元或外來字元)不被視為二進位數據,並且在傳遞給 btoa() 時會觸發錯誤。這個問題被稱為「Unicode 問題」。
二進位互通性解決方案
MDN 推薦的解決方案涉及對二進位字串表示進行編碼和解碼。這保留了資料的二進位性質並消除了 Unicode 問題。編碼過程涉及使用 Uint16Array 和 Uint8Array 將 UTF-8 字串轉換為二進位字串。解碼涉及將二進位字串轉換回 UTF-8 字串。
具有ASCII Base64 互通性的解決方案
另一個解決方案是將UTF-16 DOMString 轉換為8使用Uint8Array 的位元整數符數組,然後使用整數元數組,然後使用btoa() 對其進行編碼。此方法保留 UTF-8 功能並產生可在支援 UTF-8 的平台上解碼的純文字 base64 字串。解碼涉及使用 atob() 和decodeURIComponent() 將 base64 字串轉換回 UTF-8 字串。
已棄用的解決方案
先前使用的解決方案涉及使用 escape( ) 和 unescape() 函數,現已棄用。雖然此方法在現代瀏覽器中仍然有效,但不建議使用。
此外,值得注意的是,在使用 GitHub API 時,您可能需要在解碼之前從 Base64 來源中去除空格才能正常工作移動 Safari。
以上是為什麼 JavaScript 中 `atob()` 無法解碼 UTF-8 字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!