首頁  >  文章  >  web前端  >  為什麼 JavaScript 中 `atob()` 無法解碼 UTF-8 字串?

為什麼 JavaScript 中 `atob()` 無法解碼 UTF-8 字串?

Susan Sarandon
Susan Sarandon原創
2024-11-02 09:35:30209瀏覽

Why Does `atob()` Fail to Decode UTF-8 Strings in JavaScript?

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

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