java.net.URLEncoder.encode (स्ट्रिंग) पदावनत है, मुझे इसके बजाय क्या उपयोग करना चाहिए?


192

उपयोग करते समय मुझे निम्नलिखित चेतावनी मिलती है java.net.URLEncoder.encode:

चेतावनी: [पदावनति] सांकेतिक शब्दों में बदलना (java.lang.String)
         java.net.URLEncoder में पदावनत कर दिया गया है

इसके बजाय मुझे क्या उपयोग करना चाहिए?


23
डॉक्स में पदावनति टैग में इसका उत्तर दिया गया है: "इसके बजाय एन्कोडिंग को निर्दिष्ट करने के लिए एन्कोड (स्ट्रिंग, स्ट्रिंग) विधि का उपयोग करें।" Java.sun.com/javase/6/docs/api/java/net/URLEncoder.html देखें ।
माइकल मायर्स

जवाबों:


278

URLEncoderencode में अन्य विधि का उपयोग करें :

URLEncoder.encode(String, String)

पहला पैरामीटर एनकोड करने का टेक्स्ट है; दूसरा वर्ण एन्कोडिंग का नाम है (जैसे, UTF-8) का उपयोग करने के लिए । उदाहरण के लिए:

System.out.println(
  URLEncoder.encode(
    "urlParameterString",
    java.nio.charset.StandardCharsets.UTF_8.toString()
  )
);

14
@jsh: मैं उलझन में हूँ, URLDecoder क्यों नहीं होना चाहिए? क्यों यह जावा फूला हुआ करता है? ये स्टैटिक तरीके हैं। इसे टाइप करने के लिए समान मात्रा में प्रयास करना होगा। यदि आप पायथन को पसंद करते हैं, तो आप जावा में प्रोग्रामिंग क्यों कर रहे हैं? क्या यह इसलिए है क्योंकि अधिक लोग पायथन की तुलना में जावा का उपयोग करते हैं और आपको पायथन नौकरी के बजाय जावा नौकरी मिली है?
स्टेपियन

10
वह इसे फूला हुआ कह रहे हैं क्योंकि इसका वैश्विक वर्ग नामस्थान से अधिक है। जब आपके पास URL.encode और URL। क्यों यह सब निरर्थक और प्रफुल्लित? क्योंकि इसका जावा।
बीटी

30
और फिर आपको UnsupportedEncodingException को संभालना होगा, भले ही UTF-8 को हर जगह बहुत अधिक समर्थन किया जाना चाहिए।
डेव कैमरून

8
@tc .: जावा 7 ने इन स्थिरांक की शुरुआत की: आदि StandardCharsets.US_ASCII, StandardCharsets.UTF_8दुर्भाग्य से, URLEncoder.encodeस्वीकार नहीं करता है Charset... (लेकिन कई अन्य moethods करते हैं)।
sleske

12
मामूली सुझाव - उपयोग URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name())। स्थिर निरंतर का उपयोग UTF_8के toString()वर्ण एन्कोडिंग योजना के रूप में विधि फेंकता java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]के रूप में toString()रिटर्न "java.nio.charset.CharsetICU [UTF-8]"। वांछित "UTF-8" प्राप्त करने के लिए इसकी name()विधि का उपयोग करें।
et_l


24

वर्ग URLEncoder का उपयोग करें :

URLEncoder.encode(String s, String enc)

कहाँ पे :

s - स्ट्रिंग का अनुवाद किया जाना है।

एन्क - एक समर्थित वर्ण एन्कोडिंग का नाम ।

मानक वर्ण:

US-ASCII सेवन-बिट ASCII, उर्फ ​​ISO646-US, उर्फ ​​यूनिकोड वर्ण का बेसिक लैटिन ब्लॉक सेट ISO-8859-1 ISO लैटिन वर्णमाला नंबर 1, उर्फ ​​ISO-LATIN-1

UTF-8 आठ-बिट UCS परिवर्तन प्रारूप

UTF-16BE सोलह-बिट UCS परिवर्तन प्रारूप, बड़ा-एंडियन बाइट क्रम

UTF-16LE सोलह-बिट UCS परिवर्तन प्रारूप, छोटे-एंडियन बाइट क्रम

UTF-16 सोलह-बिट UCS परिवर्तन प्रारूप, बाइट क्रम को वैकल्पिक बाइट-ऑर्डर चिह्न द्वारा पहचाना जाता है

उदाहरण:

import java.net.URLEncoder;

String stringEncoded = URLEncoder.encode(
    "This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");

1

पहला पैरामीटर एन्कोड करने के लिए स्ट्रिंग है; दूसरा उपयोग करने के लिए वर्ण एन्कोडिंग का नाम है (उदाहरण के लिए, UTF-8)।


0

अन्य प्रतिक्रियाओं के लिए एक अतिरिक्त संदर्भ के रूप में, "यूटीएफ -8" का उपयोग करने के बजाय आप उपयोग कर सकते हैं:

HTTP.UTF_8

जो Java 4 के बाद से org.apache.http.protocol लाइब्रेरी के भाग के रूप में शामिल है, जो Android API 1 के बाद से भी शामिल है।


गलत , यह वर्ग Apache HttpClient 4.x पुस्तकालय org.apache.http.protocol.HTTPवर्ग में पाया जाता है ।
बुहाके सिंडी

@BuhakeSindi सच है, मैंने एपीआई 1 पढ़ा लेकिन यह एंड्रॉइड का नहीं जावा का था, या तो यह जावा 7 से पहले मौजूद है, यह पहले से ही ह्रास भी है।
htafoya

नहीं, यह वर्ग कभी भी जावा जेडीके के किसी भी संस्करण में मौजूद नहीं था। Android Apache HttpClient लाइब्रेरी का अनुसरण करता है (मुझे आश्चर्य नहीं होगा यदि उन्होंने वहां से स्रोत कोड भी लिया हो)।
बुहके सिंडी

3
चेतावनी: [deprecation] HTTP में UTF_8 को पदावनत कर दिया गया है
sgtdck

0

का उपयोग org.apache.commons.httpclient.URIसख्ती से एक मुद्दा नहीं है; एक समस्या यह है कि आप गलत निर्माणकर्ता को लक्षित करते हैं, जो कि मूल्यह्रास है।

बस का उपयोग कर

new URI( [string] );

वास्तव में इसे मूल्यह्रास के रूप में चिह्नित करेंगे। न्यूनतम एक अतिरिक्त तर्क (प्रथम, नीचे) और आदर्श रूप से दो प्रदान करने के लिए क्या आवश्यक है:

  1. escaped: यदि URI वर्ण अनुक्रम बच गए रूप में सत्य है। गलत है अन्यथा।
  2. charset: यदि आवश्यक हो, तो एन्कोडिंग से बचने के लिए चारसेट स्ट्रिंग

यह उस वर्ग के भीतर एक गैर-मूल्यह्रास निर्माणकर्ता को लक्षित करेगा। इसलिए एक आदर्श उपयोग इस प्रकार होगा:

new URI( [string], true, StandardCharsets.UTF_8.toString() );

(साल 11 से अधिक बाद में एक बाल - एक खेल में पागल-देर सा ! Egad ), लेकिन मुझे उम्मीद है कि इस किसी और मदद करता है, खासकर अगर अब तक अंत में विधि है अभी भी इस तरह के रूप यूआरआई उम्मीद, org.apache.commons.httpclient.setURI()

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.