URL編碼和Base64編碼

URL編碼和Base64編碼

在理清字符集和字元編碼關係一文中我們介紹了常見字符集以及字元編碼之間的關係,本期我們繼續朝著這個方向介紹常見的編碼演算法。

URL編碼

URL編碼

是瀏覽器傳送資料給伺服器時使用的編碼,它是編碼演算法,而不是加密演算法,URL編碼的目的是把任意文字資料編碼為以%字首表示的文字,編碼後的文字僅包含A~Z,a~z,0~9以及-_。*,這樣做便於瀏覽器和伺服器處理,比如,<用%3C表示。為了幫助大家理解,舉一個更加具體的例子,一條完整的URL是“http://www。mukedada。com/login?username=admin&password=123456?remark=管理員”,它的URL編碼是http%3A%2F%2Fwww。mukedada。com%2Flogin%3Fusername%3Dadmin%26password%3D123456%3Fremark%3D%E7%AE%A1%E7%90%86%E5%91%98,我們發現除了英文字母、數字之外都變成了以%開頭,由於一箇中文以3個位元組表示,所以管理員用9個%xx表示。

Java程式碼如下:

String origin = URL;String encoded = URLEncoder。encode(origin, “UTF-8”);System。out。println(encoded);String ori = new String(URLDecoder。decode(encoded, “UTF-8”));System。out。println(ori);

Base64編碼

我們知道電子郵件協議是文字協議,如果我們要在電子郵件中新增二進位制檔案,此時就可以透過Base64編碼將二進位制檔案轉換成文字,否則就會出現亂碼現象。

Base64編碼是一種將二進位制資料用文字表示的編碼演算法,它只包含64個字元,如下所示:

[‘A’, ‘B’, ‘C’, 。。。 ‘a’, ‘b’, ‘c’, 。。。 ‘0’, ‘1’, 。。。 ‘+’, ‘/’]

對應的索引分別從0到63。由於Base64只能展示64種文字字元,因此對於二進位制資料,它就需要一套對映機制來實現將二進位制資料轉換成文字資料,即選取3個位元組為一組,進行重新分組:每6個bit為一個新的位元組,形成4組,如果要編碼的二進位制資料不是3的倍數,最後會剩下1個或2個位元組怎麼辦?Base64用\x00位元組在末尾補足後,再在編碼的末尾加上1個或2個=號,表示補了多少位元組,解碼的時候,會自動去掉。

由於將原先的3個位元組變成4個位元組,也就是說長度增加了33%,因此,傳輸效率降低了,目前我們透過將Base64應用於傳輸少量二進位制資料的常見中,例如Cookie、URL等。

Java程式碼如下:

String origin = “編碼測試!”;String encoded = java。util。Base64。getEncoder()。encodeToString(origin。getBytes());System。out。println(encoded);

輸出結果是57yW56CB5rWL6K+VIQ==,末尾有兩個=說明補充了2個\x00位元組。

寫在最後

更多文章盡在公眾號“木可大大”。