Java之URLEncoder、URLDecoder、Base64編碼與解碼方式
URLEncoder、URLDecoder、Base64編碼與解碼
1. URL
主要用來http get請求url不能傳輸中文參數(shù)問題。
http請求是不接受中文參數(shù)的
1.1 URLEncoder編碼
使用指定的編碼機(jī)制將字符串轉(zhuǎn)換為 application/x-www-form-urlencoded 格式
對String編碼時(shí),使用以下規(guī)則:
- 字母數(shù)字字符 “a” 到 “z”、“A” 到 “Z” 和 “0” 到 “9” 保持不變。
- 特殊字符 “.”、"-"、"*" 和 "_"保持不變。
- 空格字符 " " 轉(zhuǎn)換為一個(gè)加號 “+”。
- 所有其他字符都是不安全的,因此首先使用一些編碼機(jī)制將它們轉(zhuǎn)換為一個(gè)或多個(gè)字節(jié)。然后每個(gè)字節(jié)用一個(gè)包含 3 個(gè)字符的字符串 "%xy"表示,其中 xy 為該字節(jié)的兩位十六進(jìn)制表示形式。推薦的編碼機(jī)制是 UTF-8。
1.2 URLDecoder解碼
使用指定的編碼機(jī)制對 application/x-www-form-urlencoded 字符串解碼。
1.3 舉例
public static void main(String[] args) throws UnsupportedEncodingException { String str = "編碼測試+-./&=a=1*%123"; String charset = "utf-8"; System.out.println("urlEncoder編碼數(shù)據(jù): " + str); String encode = URLEncoder.encode(str, charset); System.out.println("編碼結(jié)果: " + encode); String decode = URLDecoder.decode(encode, charset); System.out.println("解碼結(jié)果: " + decode); }
urlEncoder編碼數(shù)據(jù): 編碼測試+-./&=a=1*%123
編碼結(jié)果: %E7%BC%96%E7%A0%81%E6%B5%8B%E8%AF%95%2B-.%2F%26%3Da%3D1*%25123
解碼結(jié)果: 編碼測試+-./&=a=1*%123
2. Base64
在網(wǎng)絡(luò)中傳輸數(shù)據(jù)都是使用ascii方式傳輸。對于一些圖片、視頻等數(shù)據(jù),可能就會被編碼成ascii中不可見部分的編碼。
網(wǎng)絡(luò)中不同的路由設(shè)備處理方式不同,有可能就會把這部分?jǐn)?shù)據(jù)弄丟了。
為了保證數(shù)據(jù)傳輸?shù)恼_性,可以使用Base64編碼將這些不可見數(shù)據(jù)編碼成可見數(shù)據(jù)。
由于某些系統(tǒng)中只能使用ASCII字符。Base64就是用來將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種方法
2.1 Base64編碼
Base64.getEncoder().encode(str.getBytes())
2.2 Base64解碼
Base64.getDecoder().decode(encode)
2.3 舉例
public static void main(String[] args) throws UnsupportedEncodingException { String str = "編碼測試+-./&=a=1*%123"; String charset = "utf-8"; System.out.println("base64編碼數(shù)據(jù): " + str); String encode = new String(Base64.getEncoder().encode(str.getBytes())); System.out.println("編碼結(jié)果: " + encode); String decode = new String(Base64.getDecoder().decode(encode)); System.out.println("解碼結(jié)果: " + decode); }
base64編碼數(shù)據(jù): 編碼測試+-./&=a=1*%123
編碼結(jié)果: 57yW56CB5rWL6K+VKy0uLyY9YT0xKiUxMjM=
解碼結(jié)果: 編碼測試+-./&=a=1*%123
Java項(xiàng)目中遇到URLEncoder URLDecoder編碼解碼問題
做項(xiàng)目遇到的問題
就是獲取cookie中的用戶Id
1.我的用戶id是用base64Encode加碼
如下:
2.構(gòu)建需要返回給客戶端的用戶對象
3.base64Encode解碼失敗,獲取不到用戶ID,為空
4.原因是前端傳過來的用戶ID有什么的字符號不能識別,所以需要轉(zhuǎn)碼
5.這時(shí)候就要用到URLDecoder.decode編碼解碼
userIdString = URLDecoder.decode (userIdString, "UTF-8");
轉(zhuǎn)碼成功了,拿到值了
URLEncoder URLDecoder作用解釋
- URLDecoder類包含一個(gè)decode(String s,String enc)靜態(tài)方法,它可以將application/x-www-form-urlencoded MIME字符串轉(zhuǎn)成普通字符串;
- URLEncoder類包含一個(gè)encode(String s,String enc)靜態(tài)方法,它可以將普通字符串轉(zhuǎn)換成application/x-www-form-urlencoded MIME字符串。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java快速解析路徑中的參數(shù)(&與=拼接的參數(shù))
這篇文章主要介紹了java快速解析路徑中的參數(shù)(&與=拼接的參數(shù)),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-02-02SpringBoot將logback替換成log4j2的操作步驟
文章介紹了如何在SpringBoot項(xiàng)目中將默認(rèn)的日志框架logback替換為log4j2,以利用log4j2的高性能異步日志記錄特性,特別是通過Disruptor實(shí)現(xiàn)的無鎖化隊(duì)列,提高了日志處理速度,同時(shí),文章提供了詳細(xì)的配置步驟,需要的朋友可以參考下2024-10-10Java8 String內(nèi)存優(yōu)化之字符串常量池詳解
這篇文章主要介紹了Java8 String內(nèi)存優(yōu)化之字符串常量池,具有很好的參考價(jià)值,希望對大家有所幫助,2023-07-07java實(shí)現(xiàn)在原有日期時(shí)間上加幾個(gè)月或幾天
這篇文章主要介紹了java實(shí)現(xiàn)在原有日期時(shí)間上加幾個(gè)月或幾天,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10java8 多個(gè)list對象用lambda求差集操作
這篇文章主要介紹了java8 多個(gè)list對象用lambda求差集操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09