js原生實現base64編碼解碼(utf8字符集)


詳細參考本篇博文https://blog.csdn.net/qq_25243451/article/details/88658864

后台傳來經過 base64 編碼的字符串(原始字符串含有中文), 需要在前端進行解碼, 但 js 中的 atob 解碼方法不支持 unicode 字符集( btoa 也是), 換言之, 中文被解碼出來是會亂碼的。

網上流傳的多是使用encodeURIComponent 和 decodeURIComponent,原理是對中文進行百分號編碼,轉換為%xxx這種樣式,但是這樣使用之后會使編碼變長,如下

圖1(期望的編碼值)

圖2(使用百分號編碼之后)

同樣的元字符,使用encodeURIComponent之后字符更長,原因是沒有對百分號編碼的字符的進行編碼,導致編碼后的字符串變長

因此在這里調用escape和unescape方法:

const Base64 = {
  encode: (str) => {
    return window.btoa(unescape(encodeURIComponent(str)))
  },
  decode: (str) => {
    return decodeURIComponent(escape(window.atob(str)))
  }
}

具體的詳解可以參考開頭提到的那篇博文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM