2012-05-14 48 views
5

的字符串一起使用時拋出異常我對Java的URLDecoder有問題。我在JavaScript中轉義一個字符串,並將它發送給一個java servlet。然後,我解碼具有以下行的轉義字符串:Java URLDecoder在與包含%

URLDecoder.decode(request.getParameter("text"), "UTF-8"); 

這工作得很好,每特殊字符我都試過了,只有一個決策問題是「%」。每當我在字符串中使用此字符時,我會得到以下例外:

java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%) pattern 
    java.net.URLDecoder.decode(URLDecoder.java:187) 
    at.fhv.students.rotter.ajax.count.CountServlet.doGet(CountServlet.java:31) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

這是已知的錯誤嗎?還是真的是我的錯誤?

+0

「我在JavaScript中轉義字符串」。怎麼樣?你一定是做錯了。 – EJP

回答

6

這不是一個錯誤。您發送錯誤的編碼字符串。 % -sign必須編碼爲%25

如果調用request.getParameter(),我認爲你會得到一個解碼的字符串。

+0

你是對的,getParameter已經解碼了,謝謝! –

0

爲了得到參數我已經寫

String requestURL=request.getQueryString(); 

,這樣它會給我們的參數。由此我們可以使用String.substring()來獲得固定長度或單個參數情況下的首選參數。然後

String decodeValue = URLDecoder.decode(value,"UTF-8"); 

也會得到首選字符串編碼的%符號。

1

我們在我們的角度應用程序中遇到了類似的問題,我們在客戶端代碼中編碼了%符號。當我們收到servlet中的值時,由於request.getParameter()已被解碼。由於我們已經在我們的服務器端代碼中使用了URL解碼器,因此解碼%標誌兩次導致了"URLDecoder: Incomplete trailing escape (%) pattern"例外。我們發現我們不應該編碼和解碼%作爲一個值來解決這個問題。