詳細參考本篇博文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))) } }
具體的詳解可以參考開頭提到的那篇博文
