2011-01-30 16 views
16

में जावा में, मैं HTTP पोस्ट उपयोग करने के लिए सर्वर के लिए अनुरोध भेजना होगा, लेकिन यह अपवादयूआरएल एनकोड और डीकोड विशेष वर्ण जावा

जावा नीचे फेंकता है तो URL के पैरामीटर में कुछ विशेष वर्ण है। lang.IllegalArgumentException: URLDecoder: भागने में अवैध हेक्स वर्णों (%) पैटर्न - इनपुट स्ट्रिंग के लिए: "& '"

कोड भेजने के लिए डेटा

DefaultHttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(URL); 

    String sessionId = RequestUtil.getRequest().getSession().getId(); 
    String data = arg.getData().toString(); 

    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair(param1, data)); 
    params.add(new BasicNameValuePair(param2, sessionId)); 
     httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));   

    HttpResponse response = (HttpResponse) httpclient.execute(httpPost); 

और सर्वर साइड पर, मैं नीचे दिए गए कोड का उपयोग जानकारी

String data = request.getParameter(param1); 
    if (data != null) { 
    actionArg = new ChannelArg(URLDecoder.decode(data, "UTF-8")); 
    } 

कोड ठीक से कार्य को पढ़ने के लिए, लेकिन अगर मैं इनपुट जैसे कुछ विशेष वर्ण [एक あ あ # $% & '(<>? /।, あ あ あ あ あ], यह अपवाद फेंक देगा। मुझे आश्चर्य है कि कोई मुझे विशेष संकेतों को एन्कोड और डीकोड करने में सक्षम होने के लिए कुछ संकेत दे सकता है?

अग्रिम में बहुत बहुत धन्यवाद।

उत्तर

5

दुर्भाग्य यूआरएल एनकोडर आपकी समस्या का समाधान नहीं होगा। मुझे यह समस्या थी और एक कस्टम उपयोगिता का इस्तेमाल किया। मुझे याद है कि मुझे गुगलिंग से मिला है;)।

http://www.javapractices.com/topic/TopicAction.do?Id=96

+3

मैं एक बेहतर समाधान का निरीक्षण किया। अपाचे से हमारे दोस्तों में स्ट्रिंगएस्केप यूट्स (org.apache.commons.lang.StringEscapeUtils) है। अगर यह काम करता है तो कृपया इसे जांचें। –

7

इन्टरनेट के माध्यम से सुरक्षित रास्ता के लिए पाठ सांकेतिक शब्दों में बदलना करने के लिए:

import java.net.*; 
... 
try { 
    encodedValue= URLEncoder.encode(rawValue, "UTF-8"); 
} catch (UnsupportedEncodingException uee) { } 

और डिकोड करने के लिए:

try { 
    decodedValue = URLDecoder.decode(rawValue, "UTF-8"); 
} catch (UnsupportedEncodingException uee) { } 
+0

धन्यवाद स्टीवन, लेकिन जैसा कि आप मेरे कोड में देख सकते हैं, मैं UrlEncodedFormEntity का उपयोग (पैरा, "यूटीएफ -8") क्लाइंट साइट पर मेरे ऑब्जेक्ट डेटा को एन्कोड करने के लिए और सर्वर पक्ष पर, मैंने डीकोड करने के लिए URLDecoder.decode (डेटा, "यूटीएफ -8") का उपयोग किया। यह जापानी पात्रों के साथ सही ढंग से काम करता था लेकिन समस्या तब आई जब मैं कुछ चरित्र जैसे [# $% & '(<>? /।,] –

+0

धन्यवाद यह उम्मीद के रूप में काम करता है Hehehe: डी – gumuruh

3
String data = request.getParameter(param1); 

यदि यह servlet API है, मानकों को पहले से ही डीकोड किया गया है। प्रतिशत-एन्कोडिंग का कोई और प्रबंधन आवश्यक नहीं है।


मैं उपयोग नहीं किया है HttpClient, लेकिन सुनिश्चित करें कि यह शीर्षक में एन्कोडिंग भेज रहा है:

Content-type: application/x-www-form-urlencoded; charset=UTF-8 

या यदि आप चाहिए, किसी भी getParameter कॉल से पहले जाना जाता एन्कोडिंग सेट करें:

request.setCharacterEncoding("UTF-8"); 
+0

इस सामग्री-प्रकार को सेट करना मेरे लिए काम करता है। –

+0

वह सोना है! बहुत बहुत धन्यवाद – jiantongc

1

कोशिश अमरूद

,210

उपयोग com.google.common.net.UrlEscapers

यह चीनी

इस तरह के साथ ठीक काम करता है:

Escaper escaper = UrlEscapers.urlFragmentEscaper(); 
String result = escaper.escape(yoururl); 
संबंधित मुद्दे