Ios9 में stringByAddingPercentEscapesUsingEncoding के लिए प्रतिस्थापन?




objective-c url (6)

आईओएस 8 में और पहले मैं इसका उपयोग कर सकता हूं:

NSString *str = ...; // some URL
NSString *result = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

आईओएस 9 स्ट्रिंग में ByAddingPercentEscapesUsingEncoding stringByAddingPercentEscapesUsingEncoding साथ बदल दिया गया है stringByAddingPercentEncodingWithAllowedCharacters :

NSString *str = ...; // some URL
NSCharacterSet *set = ???; // where to find set for NSUTF8StringEncoding?
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];

और मेरा सवाल यह है: NSUTF8StringEncoding के उचित प्रतिस्थापन के लिए आवश्यक NSCharacterSet ( NSUTF8StringEncoding ) stringByAddingPercentEscapesUsingEncoding से stringByAddingPercentEscapesUsingEncoding ?


इसका अर्थ क्या है "यह विधि एक यूआरएल घटक या सबकंपोनेंट स्ट्रिंग को प्रतिशत-एन्कोड करने का इरादा है, न कि संपूर्ण यूआरएल स्ट्रिंग।" ? - जीनकोड सितंबर 1 '16 8:30 बजे

इसका मतलब है कि आप यूआरएल के https://xpto.example.com/path/subpath को एन्कोड नहीं करना चाहते हैं, लेकिन केवल इसके बाद क्या होता है ?

माना जाता है, क्योंकि मामलों में ऐसा करने के लिए उपयोग-मामले हैं:

https://example.com?redirectme=xxxxx

जहां xxxxx एक पूर्ण एन्कोडेड यूआरएल है।


उद्देश्य-सी के लिए:

NSString *str = ...; // some URL
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet]; 
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];

NSUTF8StringEncoding के लिए सेट कहां खोजें?

छः यूआरएल घटकों और उप-कंपोनेंट्स के लिए पूर्वनिर्धारित चरित्र सेट हैं जो प्रतिशत एन्कोडिंग की अनुमति देते हैं। ये चरित्र सेट -stringByAddingPercentEncodingWithAllowedCharacters: को पास कर -stringByAddingPercentEncodingWithAllowedCharacters: जाते -stringByAddingPercentEncodingWithAllowedCharacters: :।

 // Predefined character sets for the six URL components and subcomponents which allow percent encoding. These character sets are passed to -stringByAddingPercentEncodingWithAllowedCharacters:.
@interface NSCharacterSet (NSURLUtilities)
+ (NSCharacterSet *)URLUserAllowedCharacterSet;
+ (NSCharacterSet *)URLPasswordAllowedCharacterSet;
+ (NSCharacterSet *)URLHostAllowedCharacterSet;
+ (NSCharacterSet *)URLPathAllowedCharacterSet;
+ (NSCharacterSet *)URLQueryAllowedCharacterSet;
+ (NSCharacterSet *)URLFragmentAllowedCharacterSet;
@end

बहिष्कार संदेश कहता है (जोर मेरा):

StringByAddingPercentEncodingWithAllowedCharacters (_ :) इसके बजाय, जो हमेशा अनुशंसित यूटीएफ -8 एन्कोडिंग का उपयोग करता है , और जो एक विशिष्ट यूआरएल घटक या सबकंपोनेंट के लिए एन्कोड करता है क्योंकि प्रत्येक यूआरएल घटक या सबकंपोनेंट के पास अलग-अलग नियम हैं जो पात्र हैं।

तो आपको केवल तर्क के रूप में पर्याप्त NSCharacterSet आपूर्ति करने की आवश्यकता है। सौभाग्य से, यूआरएल के लिए URLHostAllowedCharacterSet नामक एक बहुत ही आसान क्लास विधि है जिसे आप इस तरह उपयोग कर सकते हैं:

NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet]; 

हालांकि, जागरूक रहें कि:

यह विधि एक यूआरएल घटक या सबकंपोनेंट स्ट्रिंग को प्रतिशत-एन्कोड करने का इरादा है, न कि संपूर्ण यूआरएल स्ट्रिंग।


URLHostAllowedCharacterSet मेरे लिए काम नहीं कर रहा है । मैं इसके बजाय URLFragmentAllowedCharacterSet उपयोग करता URLFragmentAllowedCharacterSet

उद्देश्य सी

NSCharacterSet *set = [NSCharacterSet URLFragmentAllowedCharacterSet];
NSString * encodedString = [@"url string" stringByAddingPercentEncodingWithAllowedCharacters:set];

स्विफ्ट - 4

"url string".addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

निम्नलिखित उपयोगी (उलटा) चरित्र सेट हैं:

URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>[email protected]\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>[email protected][\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet     "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>[email protected][\]^`

बहिष्कार संदेश कहता है (जोर मेरा):

StringByAddingPercentEncodingWithAllowedCharacters (_ :) इसके बजाय, जो हमेशा अनुशंसित यूटीएफ -8 एन्कोडिंग का उपयोग करता है , और जो एक विशिष्ट यूआरएल घटक या सबकंपोनेंट के लिए एन्कोड करता है क्योंकि प्रत्येक यूआरएल घटक या सबकंपोनेंट के पास अलग-अलग नियम हैं जो पात्र हैं।

तो आपको केवल तर्क के रूप में पर्याप्त NSCharacterSet आपूर्ति करने की आवश्यकता है। सौभाग्य से, यूआरएल के लिए URLHostAllowedCharacterSet नामक एक बहुत ही आसान क्लास विधि है जिसे आप इस तरह उपयोग कर सकते हैं:

let encodedHost = unencodedHost.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())

स्विफ्ट 3 के लिए अद्यतन - विधि स्थैतिक संपत्ति urlHostAllowed हो जाता urlHostAllowed :

let encodedHost = unencodedHost.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

हालांकि, जागरूक रहें कि:

यह विधि एक यूआरएल घटक या सबकंपोनेंट स्ट्रिंग को प्रतिशत-एन्कोड करने का इरादा है, न कि संपूर्ण यूआरएल स्ट्रिंग।


स्विफ्ट 3.0 के लिए

आप urlHostAllowed characterSet का उपयोग कर सकते हैं।

/// होस्ट यूआरएल सबकंपोनेंट में अनुमत वर्णों के लिए वर्ण सेट देता है।

public static var urlHostAllowed: CharacterSet { get }

WebserviceCalls.getParamValueStringForURLFromDictionary(settingsDict as! Dictionary<String, AnyObject>).addingPercentEncoding(withAllowedCharacters: CharacterSet.urlHostAllowed)

उद्देश्य सी

यह कोड मेरे लिए काम करता है:

urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];




deprecated