javascript
使用 JavaScript 进行 Base64 编码与解码
Base64 編碼普遍應用于需要通過被設計為處理文本數據的媒介上儲存和傳輸二進制數據而需要編碼該二進制數據的場景。這樣是為了保證數據的完整并且不用在傳輸過程中修改這些數據。Base64也被一些應用(包括使用MIME的電子郵件)和在XML中儲存復雜的數據時使用。?
由于 BASE64 是一種非常常用的編碼方案,在開發中經常會使用到,所以當前瀏覽器標準 API(atob、btoa) 都支持進行 BASE64 操作,遺憾的是上面提到的標準 API 僅支持 ASCII 字符。所以使用范圍受限。
1. JS 標準API atob 與 btoa?
PS:僅支持 ASCII 字符串,不能處理中文等
在JavaScript中,有2個函數分別用來處理解碼和編碼base64?字符串:
atob()? //?解碼 btoa()? //?編碼這里的 a 指的是?ASCII 編碼,即“美國信息交換標準代碼”。b 指的是 Base64 編碼。結合 to 這個單詞,就很容易知道 atob 與 btoa 這兩個函數的作用是干嘛的了。
atob()?函數能夠解碼通過 base-64 編碼的字符串數據。相反地,btoa()?函數能夠從二進制數據“字符串”創建一個base-64編碼的ASCII 字符串。
Demo 樣例:
對 ‘中文’ 二字進行 BASE64 編碼為:【5Lit5paHCg==】
在瀏覽器控制臺直接使用 btoa('中文') 進行 base64 編碼會報錯
在瀏覽器控制臺直接使用 atob('5Lit5paHCg==') 進行 base64 解碼會出現亂碼
更多詳情參考 MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
MDN 中的方案一,雖然實現了能夠處理中文,但并不是直接對中文等非 ASCII 字符的原始二進制流進行 BASE64 編碼,僅僅是將轉義【轉義即為:將中文等特殊字符替換為特定 ASCII 字符的組合】之后不過包含非 ASCII 字符的內容進行 BASE64 編碼,與直接對原始數據的二進制流進行 BASE64 編碼結果是不一樣的。所以不適合采用。
2. 正確有效的 BASE64 編碼姿勢
2.1 使用 Buffer 對象
Buffer 是 Nodejs 中的標準全局對象(即無需導入),可以拿來使用。所以如果你的項目是基于 nodejs 構建的(比如你是使用 vue-cli 創建的 vue 項目),那么你只需一行代碼就可以做到。
let base64Str = Buffer.from('Hello 中國!', 'utf-8').toString('base64') // 編碼 console.log('Hello 中國!: ' + base64Str) let decStr = Buffer.from(base64Str, 'base64').toString('utf8') // 解碼 console.log('解析Base64: ' + decStr)Buffer 詳情參考:http://nodejs.cn/api/buffer.html#buffer_buffers_and_character_encodings
2.1 非 NodeJS 環境解決方案
這時候就要選用第三方已經編譯好的庫了,這里推薦使用?js-base64:
項目地址:https://github.com/dankogai/js-base64
具體使用項目中已經寫的很清楚了,這里就不再啰嗦。
Base64.encode('小飼弾'); // 5bCP6aO85by+ Base64.encodeURI('小飼弾'); // 5bCP6aO85by-總結
以上是生活随笔為你收集整理的使用 JavaScript 进行 Base64 编码与解码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Manjaro 软件源及软件管理相关操作
- 下一篇: Vim 上手指南【基础、中级】