爲何會有Base64編碼呢?由於有些網絡傳送渠道並不支持全部的字節,例如傳統的郵件只支持可見字符的傳送,像ASCII碼的控制字符就 不能經過郵件傳送。這樣用途就受到了很大的限制,好比圖片二進制流的每一個字節不可能所有是可見字符,因此就傳送不了。最好的方法就是在不改變傳統協議的情 況下,作一種擴展方案來支持二進制文件的傳送。把不可打印的字符也能用可打印字符來表示,問題就解決了。Base64編碼應運而生,Base64就是一種 基於64個可打印字符來表示二進制數據的表示方法。javascript
看一下Base64的索引表,字符選用了"A-Z、a-z、0-九、+、/" 64個可打印字符。數值表明字符的索引,這個是標準Base64協議規定的,不能更改。css
Base64的碼錶只有64個字符, 若是要表達64個字符的話,使用6的bit便可徹底表示(2的6次方爲64)。html
由於Base64的編碼只有6個bit便可表示,而正常的字符是使用8個bit表示, 8和6的最小公倍數是24,因此4個Base64字符能夠表示3個標準的ascll字符;java
若是是字符串轉換爲Base64碼, 會先把對應的字符串轉換爲ascll碼錶對應的數字, 而後再把數字轉換爲2進制, 好比a的ascll碼味97, 97的二進制是:01100001, 把8個二進制提取成6個,剩下的2個二進制和後面的二進制繼續拼接, 最後再把6個二進制碼轉換爲Base64對於的編碼, 如下爲具體的解析過程案例:git
把abc這三個字符轉換爲Base64的過程github
字符串 a b c ASCII 97 98 99 8bit 01100001 01100010 01100011 6bit 011000 010110 001001 100011 十進制 24 22 9 35 對應編碼 Y W J j
把man這三個字符轉換爲Base64的過程瀏覽器
字符串 m a n ASCII 109 97 110 8bit 01101101 01100001 01101110 6bit 011011 010110 000101 101110 十進制 27 22 5 46 對應編碼 b W F u
如今還有一點小問題,當轉換到最後, 最後的字符不足3個字符咋辦, 若是不足三個字符的話,咱們直接在最後添加=號便可, 具體能夠參考如下兩個字符串轉換案例:微信
目前Data URI 支持不少中類型:網絡
目前,Data URI scheme支持的類型有: data:,文本數據 data:text/plain,文本數據 data:text/html,HTML代碼 data:text/html;base64,base64編碼的HTML代碼 data:text/css,CSS代碼 data:text/css;base64,base64編碼的CSS代碼 data:text/javascript,Javascript代碼 data:text/javascript;base64,base64編碼的Javascript代碼 data:image/gif;base64,base64編碼的gif圖片數據 data:image/png;base64,base64編碼的png圖片數據 data:image/jpeg;base64,base64編碼的jpeg圖片數據 data:image/x-icon;base64,base64編碼的icon圖片數據
base64簡單地說,它把一些 8-bit 數據翻譯成標準 ASCII 字符,目前,IE八、Firfox、Chrome、Opera瀏覽器都支持這種小文件嵌入。網站
base64的編碼原理:http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html
base64字節碼原理:http://www.cnblogs.com/chengxiaohui/articles/3951129.html
做者: NONO
出處:http://www.cnblogs.com/diligenceday/
企業網站:http://www.idrwl.com/
開源博客:http://www.github.com/sqqihao
QQ:287101329
微信:18101055830