2012-05-14 25 views
5

Tôi gặp sự cố với Trình xác định URL của Java. Tôi đang thoát một String trong JavaScript, và gửi nó đến một servlet java. Sau đó, tôi giải mã chuỗi thoát bằng dòng sau:Java URLDecoder ném ngoại lệ khi được sử dụng với chuỗi chứa%

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

Điều này phù hợp với mọi ký tự đặc biệt mà tôi đã thử, chỉ có một vấn đề là '%'. Mỗi lần tôi sử dụng ký tự này trong chuỗi, tôi nhận được ngoại lệ sau:

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) 

Đây có phải là lỗi đã biết không? Hoặc là nó thực sự sai lầm của tôi?

+0

"Tôi đang thoát chuỗi bằng JavaScript". Làm sao? Bạn phải làm điều đó sai. – EJP

Trả lời

6

Nó không phải là lỗi. Bạn gửi một chuỗi mã hóa sai. Mã số % phải được mã hóa là %25

Nếu bạn gọi request.getParameter(), tôi nghĩ bạn nhận được chuỗi đã giải mã.

+0

Bạn nói đúng, getParameter đã được giải mã, cảm ơn bạn! –

0

Để có được thông số tôi đã viết

String requestURL=request.getQueryString(); 

để Nó sẽ cung cấp cho chúng tôi các thông số. Từ đó chúng ta có thể sử dụng String.substring() để có tham số ưu tiên trong trường hợp độ dài cố định hoặc tham số đơn. Sau đó,

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

cũng sẽ nhận được chuỗi được ưu tiên được mã hóa% dấu.

1

Chúng tôi đã gặp sự cố tương tự trong ứng dụng góc của chúng tôi khi chúng tôi mã hóa % đăng nhập một lần trong mã phía máy khách. Khi chúng tôi nhận được giá trị trong servlet nó đã được giải mã do request.getParameter(). Vì chúng tôi đã có bộ giải mã URL trong mã phía máy chủ của chúng tôi, việc giải mã dấu hiệu % hai lần đã gây ra một ngoại lệ "URLDecoder: Incomplete trailing escape (%) pattern". Chúng tôi đã tìm ra rằng chúng tôi không nên mã hóa và giải mã % như một giá trị để giải quyết vấn đề này.