【URLDecoder】java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in es


Java調用 URLDecoder.decode(str, "UTF-8"); 拋出以上的異常,其主要原因是% 在URL中是特殊字符,需要特殊轉義一下,

上面的字符串中'%'是一個中文字符'是',而轉換的實現是將%后面的兩個字符一起轉為一個16進制數。拿"%是"來轉換數字,肯定會有NumberFormatException異常。

類似的如果請求字符串中有'+',也會有問題。因為'+'被當做空格使用了。

一個解決辦法就是將%替換為%25。

data = data.replaceAll("%(?![0-9a-fA-F]{2})", "%25");
data = data.replaceAll("\\+", "%2B");
data = URLDecoder.decode(data, "utf-8");

這里使用了一個特殊正則表達式:零寬負向先行斷言(zero-width negative lookahead assertion),模式為(?!pattern),代表字符串中的一個位置,緊接該位置之后的字符序列不能匹配pattern。%(?![0-9a-fA-F]{2})意思是'%'開始,但是后面兩個字符不是數字,也不是字母。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM