Java中的UrlDecoder 和 UrlEncoder_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
一 URLEncoder
HTML 格式編碼的實(shí)用工具類(lèi)。該類(lèi)包含了將 String 轉(zhuǎn)換為 application/x-www-form-urlencoded MIME 格式的靜態(tài)方法。有關(guān) HTML 格式編碼的更多信息,請(qǐng)參閱 HTML 規(guī)范。
對(duì) String 編碼時(shí),使用以下規(guī)則:
字母數(shù)字字符 "a" 到 "z"、"A" 到 "Z" 和 "0" 到 "9" 保持不變。
特殊字符 "."、"-"、"*" 和 "_" 保持不變。
空格字符 " " 轉(zhuǎn)換為一個(gè)加號(hào) "+"。
所有其他字符都是不安全的,因此首先使用一些編碼機(jī)制將它們轉(zhuǎn)換為一個(gè)或多個(gè)字節(jié)。然后每個(gè)字節(jié)用一個(gè)包含 3 個(gè)字符的字符串 "%xy" 表示,其中 xy 為該字節(jié)的兩位十六進(jìn)制表示形式。推薦的編碼機(jī)制是 UTF-8。但是,出于兼容性考慮,如果未指定一種編碼,則使用相應(yīng)平臺(tái)的默認(rèn)編碼。
例如,使用 UTF-8 編碼機(jī)制,字符串 "The string ü@foo-bar" 將轉(zhuǎn)換為 "The+string+%C3%BC%40foo-bar",因?yàn)樵?UTF-8 中,字符 ü 編碼為兩個(gè)字節(jié),C3 (十六進(jìn)制)和 BC (十六進(jìn)制),字符 @ 編碼為一個(gè)字節(jié) 40 (十六進(jìn)制)。
二 URLDecoder
該類(lèi)包含了將 String 從 application/x-www-form-urlencoded MIME 格式解碼的靜態(tài)方法。
該轉(zhuǎn)換過(guò)程正好與 URLEncoder 類(lèi)使用的過(guò)程相反。假定已編碼的字符串中的所有字符為下列之一:"a" 到 "z"、"A" 到 "Z"、"0" 到 "9" 和 "-"、"_"、"." 以及 "*"。允許有 "%" 字符,但是將它解釋為特殊轉(zhuǎn)義序列的開(kāi)始。
轉(zhuǎn)換中使用以下規(guī)則:
字母數(shù)字字符 "a" 到 "z"、"A" 到 "Z" 和 "0" 到 "9" 保持不變。
特殊字符 "."、"-"、"*" 和 "_" 保持不變。
加號(hào) "+" 轉(zhuǎn)換為空格字符 " "。
將把 "%xy" 格式序列視為一個(gè)字節(jié),其中 xy 為 8 位的兩位十六進(jìn)制表示形式。然后,所有連續(xù)包含一個(gè)或多個(gè)這些字節(jié)序列的子字符串,將被其編碼可生成這些連續(xù)字節(jié)的字符所代替。可以指定對(duì)這些字符進(jìn)行解碼的編碼機(jī)制,或者如果未指定的話,則使用平臺(tái)的默認(rèn)編碼機(jī)制。
該解碼器處理非法字符串有兩種可能的方法。一種方法是不管該非法字符,另一種方法是拋出 IllegalArgumentException 異常
簡(jiǎn)單示例:
Java代碼
try {
String encodeStr = URLEncoder.encode("中國(guó)", "utf-8");
System.out.println("處理后:" + encodeStr);
String decodeStr = URLDecoder.decode(encodeStr, "utf-8");
System.out.println("解碼:" + decodeStr);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
運(yùn)行結(jié)果:
Java代碼
處理后:%E4%B8%AD%E5%9B%BD 解碼:中國(guó)
相關(guān)文章
Spring Boot實(shí)現(xiàn)郵件發(fā)送必會(huì)的5種姿勢(shì)
這篇文章主要給大家介紹了關(guān)于Spring Boot實(shí)現(xiàn)郵件發(fā)送必會(huì)的5種姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
MyBatis在insert插入操作時(shí)返回主鍵ID的配置(推薦)
這篇文章主要介紹了MyBatis在insert插入操作時(shí)返回主鍵ID的配置的相關(guān)資料,需要的朋友可以參考下2017-10-10
Java參數(shù)傳遞實(shí)現(xiàn)代碼及過(guò)程圖解
這篇文章主要介紹了Java參數(shù)傳遞實(shí)現(xiàn)代碼及過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
詳解使用Spring Boot開(kāi)發(fā)Restful程序
本篇文章主要介紹了詳解使用Spring Boot開(kāi)發(fā)Restful程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
SpringBoot 實(shí)戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法
本篇文章主要介紹了SpringBoot 實(shí)戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
spring boot+自定義 AOP 實(shí)現(xiàn)全局校驗(yàn)的實(shí)例代碼
最近公司重構(gòu)項(xiàng)目,重構(gòu)為最熱的微服務(wù)框架 spring boot, 重構(gòu)的時(shí)候遇到幾個(gè)可以統(tǒng)一處理的問(wèn)題。這篇文章主要介紹了spring boot+自定義 AOP 實(shí)現(xiàn)全局校驗(yàn) ,需要的朋友可以參考下2019-04-04

