一. Base64編碼由來
為什么會有Base64編碼呢?因為有些網絡傳送渠道並不支持所有的字節,例如傳統的郵件只支持可見字符的傳送,像ASCII碼的控制字符就 不能通過郵件傳送。這樣用途就受到了很大的限制,比如圖片二進制流的每個字節不可能全部是可見字符,所以就傳送不了。最好的方法就是在不改變傳統協議的情 況下,做一種擴展方案來支持二進制文件的傳送。把不可打印的字符也能用可打印字符來表示,問題就解決了。Base64編碼應運而生,Base64就是一種 基於64個可打印字符來表示二進制數據的表示方法。
二.Base的索引表
看一下Base64的索引表,字符選用了"A-Z、a-z、0-9、+、/" 64個可打印字符。數值代表字符的索引,這個是標准Base64協議規定的,不能更改。
三.Base64的原理
Base64的碼表只有64個字符, 如果要表達64個字符的話,使用6的bit即可完全表示(2的6次方為64)。
因為Base64的編碼只有6個bit即可表示,而正常的字符是使用8個bit表示, 8和6的最小公倍數是24,所以4個Base64字符可以表示3個標准的ascll字符;
如果是字符串轉換為Base64碼, 會先把對應的字符串轉換為ascll碼表對應的數字, 然后再把數字轉換為2進制, 比如a的ascll碼味97, 97的二進制是:01100001, 把8個二進制提取成6個,剩下的2個二進制和后面的二進制繼續拼接, 最后再把6個二進制碼轉換為Base64對於的編碼, 以下為具體的解析過程案例:
把abc這三個字符轉換為Base64的過程
字符串 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 字符,目前,IE8、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