咱們知道計算機中的一個字節是由八個二進制數組成的,那總共就有256個組合,對應的就是ASCII
編碼,而ASCII
編碼前32位是表示翻頁等功能的控制符,128~255之間的值是不可見字符。因此就形成了再計算機傳輸中有些ASCII
不可見從而丟失或者轉義錯誤的狀況!數組
爲了有效顯示這些信息,Base64編碼
就是一種解決方案,簡單來講它就是將原始數據轉換成二進制以後進行再編碼,而這個再編碼的每個單位是由6個二進制數組成,總共有64中組合,而這64個值都是咱們可以正常顯示和傳輸的!服務器
咱們都知道,平時所看到的的字符串在計算機裏最終都要轉化爲二進制數據,那一樣是一串二進制數據,不一樣的編碼方式就決定了這串數據表示的含義。工具
所謂Base64編碼就是將本來須要8個二進制表示的一個字符從新截取分配成只要6個二進制數據表示,這樣從新分配以後,一段Base654碼所包含的6的二進制數據所能表示的十進制數就是0(000000)到63(111111),下圖直觀地表示了這個轉化過程: post
固然,比較理想的狀況是原始字符串是3的倍數,那樣就能完整地轉化爲Base64
字符,若是原始值不能被3整除就用0值來補充原始字符串使原始值變成3的倍數,因此纔會出現通過Base64
轉化以後字符長度會變成原來的4/3,也就是長了1/3.。下圖中藍色的部分就是補上的二進制數據: 優化
因此Base64
編碼實際上就是將原始字符串通過從新編碼後變成了64
個可被機器識別、打印的字符(包含26個小寫字母、26個大寫字母、10個阿拉伯數字和+
/
),固然若是最後兩位選擇不一樣的話就造成了Base64
的不一樣變種,好比Base64 URL
編碼,下面是Base64
的64個字符的編碼對照表: 網站
做爲優化網站加載速度的一種方式,可讓咱們直接在HTML
內嵌一些base64
編碼的圖片,這樣能夠減小http
請求。不過勁酒雖好不能貪杯,必定要注意分寸。前面咱們提到了通過base64
編碼以後體積會增大1/3,因此對於一些很小的圖片、icon是能夠的,但對於一些細節較豐富的圖片就得不償失了。編碼
base64
的出現本質上是一種將二進制數據轉成文本數據的方案,因此對一些須要文本傳輸的系統例如郵件等會有應用。加密
關於文件類型的base64
編碼,面對一串圖片的base64
編碼,我一度陷入沉思,這個東西究極表明啥,是存在服務器上的一串URL仍是就是表示這個圖片自己,後來通過查資料我想清楚了,這就是表明圖片自己。由於一個文件在計算機上的表示最終仍是要轉爲二進制的,二咱們這個base64
編碼只不過是將表示圖片信息的二進制數據用另外一種咱們看得懂的形式表示出來而已。至於圖片轉爲二進制數據在不一樣語言中都有相應的工具類方法的。code
理解了base64
的原理不難發現,它僅僅只是一種編碼方式,連加密都算不上,就是一種將二進制數據轉成咱們看得懂的格式的編碼方式,它使用場景不少,但也不能濫用,畢竟它是會讓編碼體積增大1/3,同時在不一樣的情境下可能有更好的編碼方式選擇,因此,多多瞭解一些才能作到有的放矢、遊刃有餘!cdn