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