1. 程式人生 > >URLDecoder和URLEncoder對空格加號的特殊處理

URLDecoder和URLEncoder對空格加號的特殊處理

[原文地址:http://asflex.iteye.com/blog/356028]

一 URLEncoder 

HTML 格式編碼的實用工具類。該類包含了將 String 轉換為 application/x-www-form-urlencoded MIME 格式的靜態方法。有關 HTML 格式編碼的更多資訊,請參閱 HTML 規範。 

對 String 編碼時,使用以下規則: 
字母數字字元 "a" 到 "z"、"A" 到 "Z" 和 "0" 到 "9" 保持不變。 
特殊字元 "."、"-"、"*" 和 "_" 保持不變。 
空格字元 " " 轉換為一個加號 "+"。 
所有其他字元都是不安全的,因此首先使用一些編碼機制將它們轉換為一個或多個位元組。然後每個位元組用一個包含 3 個字元的字串 "%xy" 表示,其中 xy 為該位元組的兩位十六進位制表示形式。推薦的編碼機制是 UTF-8。但是,出於相容性考慮,如果未指定一種編碼,則使用相應平臺的預設編碼。 
例如,使用 UTF-8 編碼機制,字串 "The string ü@foo-bar" 將轉換為 "The+string+%C3%BC%40foo-bar",因為在 UTF-8 中,字元 ü 編碼為兩個位元組,C3 (十六進位制)和 BC (十六進位制),字元 @ 編碼為一個位元組 40 (十六進位制)。 

二 URLDecoder 
該類包含了將 String 從 application/x-www-form-urlencoded MIME 格式解碼的靜態方法。 
 

該轉換過程正好與 URLEncoder 類使用的過程相反。假定已編碼的字串中的所有字元為下列之一:"a" 到 "z"、"A" 到 "Z"、"0" 到 "9" 和 "-"、"_"、"." 以及 "*"。允許有 "%" 字元,但是將它解釋為特殊轉義序列的開始。 

轉換中使用以下規則: 
字母數字字元 "a" 到 "z"、"A" 到 "Z" 和 "0" 到 "9" 保持不變。 
特殊字元 "."、"-"、"*" 和 "_" 保持不變。 
加號 "+" 轉換為空格字元 " "。 
將把 "%xy" 格式序列視為一個位元組,其中 xy 為 8 位的兩位十六進位制表示形式。然後,所有連續包含一個或多個這些位元組序列的子字串,將被其編碼可生成這些連續位元組的字元所代替。可以指定對這些字元進行解碼的編碼機制,或者如果未指定的話,則使用平臺的預設編碼機制。 
該解碼器處理非法字串有兩種可能的方法。一種方法是不管該非法字元,另一種方法是丟擲 IllegalArgumentException 異常 。