java轉義問題【java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%) pattern】

詳細錯誤如下:

java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%) pattern
    at java.net.URLDecoder.decode(URLDecoder.java:187)

我們知道中文的話,瀏覽器肯定會轉碼,但是轉碼後的格式一般都是%兩個字符,也就是百分號後面,接英文字母或者數字!

但是假設參數中原本就有百分號%的話,這時瀏覽器不會處理,接着再使用decode進行解碼時,會出錯,因爲java程序認爲後面應該還有兩個字符纔對,結果沒有。。。

解決轉義特殊字符%的問題

只需要把單獨出現的%替換成轉碼後的字符就行了,也就是%25。

這裏強調下,網上很多的改法如下:

estimateName = estimateName.replaceAll("%", "%25");
1
上面這種寫法是錯誤的,因爲其把正確的都替換掉了。 
這裏我們需要明白,要替換掉的是單獨出現的百分號,而不是全部的百分號

正確改法:

estimateName = estimateName.replaceAll("%(?![0-9a-fA-F]{2})", "%25");

上的字符串就會解碼成如下格式(重點看最後):

%E6%97%A5%E6%B6%A8%E5%B9%85%E5%81%8F%E7%A6%BB%E5%80%BC%E8%BE%BE%E5%88%B07%25

講解下%(?![0-9a-fA-F]{2}): 
這是個正則表達式,含義是:不匹配%後面兩位爲數字或字母(包括大小寫)的字符;這樣就把正確的排除掉了,剩下的就是需要匹配替換的。

最後附上url編碼地址:

HTML URL 編碼 
Java正確URL解碼方式:URLDecoder.decode
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章