但是處於好奇心,還是驅使我去了解下base64編碼的原理。以便也在不支援原生base64編碼的ie下可以得以實現。
【base64】
-base64的編碼都是按字串長度,以每3個8bit的字元為一組,
-然後針對每組,首先獲取每個字元的ascii編碼,
-然後將ascii編碼轉換成8bit的二進位制,得到一組3*8=24bit的位元組
-然後再將這24bit劃分為4個6bit的位元組,並在每個6bit的位元組前面都填兩個高位0,得到4個8bit的位元組
-然後將這4個8bit的位元組轉換成10進製,對照base64編碼表 (下表),得到對應編碼後的字元。
(注:1. 要求被編碼字元是8bit的,所以須在ascii編碼範圍內,u0000-u00ff,中文就不行。
2. 如果被編碼字元長度不是3的倍數的時候,則都用0代替,對應的輸出字元為=)
由於lucy只有4個字母,所以按3個一組的話,第二組還有兩個空位,所以需要用0來補齊。這裡就需要注意,因為是需要補齊而出現的0,所以轉化成十進位制的時候就不能按常規用base64編碼表來對應,所以不是a, 可以理解成為一種特殊的「異常」,編碼應該對應「=」。
有了上面的理論,那我們實現乙個base64編碼就容易了。
/**
* base64 encoding & decoding
* for fixing browsers which don't support base64 | btoa |atob
*/(function (win, undefined)
var i = 0,
prev,
ascii,
mod,
result = ;
while (i < s.length)
prev = ascii;
i ++;
}// 迴圈結束後看mod, 為0 證明需補3個6位,第乙個為最後乙個8位的最後兩位後面補4個0。另外兩個6位對應的是異常的「=」;
// mod為1,證明還需補兩個6位,乙個是最後乙個8位的後4位補兩個0,另乙個對應異常的「=」
if(mod == 0) else if (mod == 1)
return result.join('');
}// atob method
// 逆轉encode的思路即可
function _atob (s)
prev = cur;
i ++;
}return result.join('');
}return ;
}();
if (!win.base64)
if (!win.btoa)
if (!win.atob)
})(window)
關於base64編碼的原理及實現
但是處於好奇心,還是驅使我去了解下base64編碼的原理。以便也在不支援原生base64編碼的ie下可以得以實現。base64 base64的編碼都是按字串長度,以每3個8bit的字元為一組,然後針對每組,首先獲取每個字元的ascii編碼,然後將ascii編碼轉換成8bit的二進位制,得到一組3 8...
關於base64編碼的原理及實現
但是處於好奇心,還是驅使我去了解下base64編碼的原理。以便也在不支援原生base64編碼的ie下可以得以實現。base64 base64的編碼都是按字串長度,以每3個8bit的字元為一組,然後針對每組,首先獲取每個字元的ascii編碼,然後將ascii編碼轉換成8bit的二進位制,得到一組3 8...
關於base64編碼的原理及實現
但是處於好奇心,還是驅使我去了解下base64編碼的原理。以便也在不支援原生base64編碼的ie下可以得以實現。base64 base64的編碼都是按字串長度,以每3個8bit的字元為一組,然後針對每組,首先獲取每個字元的ascii編碼,然後將ascii編碼轉換成8bit的二進位制,得到一組3 8...