2012-05-14 24 views
5

मुझे जावा के URLDecoder के साथ कोई समस्या है। मैं जावास्क्रिप्ट में एक स्ट्रिंग से बच रहा हूं, और इसे जावा सर्वलेट में भेज रहा हूं।जावा 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

"मैं जावास्क्रिप्ट में एक स्ट्रिंग से बच रहा हूं।" कैसे? आपको यह गलत करना होगा। – EJP

उत्तर

6

यह एक बग नहीं है। आप गलत एन्कोडेड स्ट्रिंग भेजते हैं। % -ign को %25

के रूप में एन्कोड किया जाना है यदि आप request.getParameter() को कॉल करते हैं, तो मुझे लगता है कि आपको एक डीकोडेड स्ट्रिंग मिलती है।

+0

आप सही हैं, प्राप्त करें पैरामीटर पहले से ही डीकोड, धन्यवाद! –

0

आदेश पैरामीटर प्राप्त करने के लिए मैं

String requestURL=request.getQueryString(); 

लिखा है ताकि यह हमारे मानकों दे देंगे। उस से हम फिक्स्ड लम्बाई या सिंगल पैरामीटर के मामले में प्रीपेर्ड पैरामीटर प्राप्त करने के लिए String.substring() का उपयोग कर सकते हैं। फिर

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

पसंदीदा स्ट्रिंग एन्कोडेड% चिह्न भी प्राप्त होगा।

1

हमारे कोणीय अनुप्रयोग में हमें एक ही समस्या थी जहां हम % क्लाइंट साइड कोड में एक बार साइन इन कर रहे थे। जब हमें सर्वलेट में मान प्राप्त हुआ तो इसे request.getParameter() के कारण पहले ही डीकोड किया गया था। चूंकि हमारे पास पहले से ही हमारे अलग-अलग पक्ष कोड में यूआरएल डिकोडर था, % को दो बार हस्ताक्षर करने से "URLDecoder: Incomplete trailing escape (%) pattern" अपवाद हो रहा था। हमने पाया कि हमें इस मुद्दे का सामना करने के लिए % को एन्कोड और डीकोड नहीं करना चाहिए।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^