2011-10-27 11 views
29

स्ट्रिंगबीयरप्लेसिंग पेरेंट ईस्केप यूजिंग एन्कोडिंग विधि ठीक से काम नहीं कर रही है क्योंकि यह विशेष प्रतीकों को डीकोड नहीं कर रहा है जो% वर्ण, यानी, + अक्षर से शुरू नहीं होता है। क्या किसी को आईओएस में ऐसा करने के लिए बेहतर तरीके से पता है?आईओएस में यूआरएल डीकोड कैसे करें - उद्देश्य सी

यहाँ मैं वर्तमान में क्या उपयोग कर रहा हूँ है:

NSString *path = [@"path+with+spaces" 
    stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

और यहाँ उत्पादन का एक उदाहरण है:

पथ + + रिक्तियों के साथ

+3

आप अपने कोड या कहाँ और कैसे है कि विधि आपके लिए ठीक से काम नहीं कर रहा है का एक उदाहरण पोस्ट कृपया कर सकते हैं? – Carter

+0

बस किया, धन्यवाद। – VinnyD

+0

+ एक मान्य यूआरएल चरित्र है। – titaniumdecoy

उत्तर

51
NSString *path = [[@"path+with+spaces" 
    stringByReplacingOccurrencesOfString:@"+" withString:@" "] 
    stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

ध्यान दें कि प्लस के लिए अंतरिक्ष प्रतिस्थापन केवल application/x-www-form-urlencoded डेटा में प्रयोग किया जाता है - एक URL की क्वेरी स्ट्रिंग हिस्सा है, या एक POST अनुरोध के शरीर।

+2

अन्य पात्र भी हैं जो + को डीकोड करने की आवश्यकता है, नहीं? – VinnyD

+0

सं। Http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1 –

+0

जब मैंने एक स्ट्रिंग डीकोड करने की कोशिश की @ @ abcjhjhdfjhafjakhfjaklfj12346890 (*^$ # @@@ # $% ^^ ........ ", इस विधि का उपयोग करके, यह शून्य लौटाता है। ऐसा लगता है जैसे stringByReplacingPercentEscapesUsingEncoding कुछ समस्याएं पैदा कर रहा है क्योंकि" परिवर्तन संभव नहीं है अगर परिवर्तन संभव नहीं है (यानी प्रतिशत बच निकलता है बाइट अनुक्रम कानूनी नहीं है दिए गए एन्कोडिंग में)। "(NSURL.h से)। तो बस मेरे लिए एक श्रेणी बनाने वाले इस मुद्दे में भाग लेने वालों के लिए एक सिर। –

1

आप के साथ धन चिह्न को बदलने के लिए कोशिश कर रहे हैं प्रतिशत बच निकलता है, "+" से "" (एकल स्थान) से एक स्ट्रिंग प्रतिस्थापन निष्पादित करता है। फिर प्रतिशत भागने के लिए stringByAddingPercentEscapesUsingEncoding: का उपयोग करें।

प्लस साइन कई आरक्षित यूआरएल अक्षरों में से एक है जो कभी एन्कोड नहीं किया जाता है।

(stringByReplacingPercentEscapesUsingEncoding: डीकोड प्रतिशत पलायन)

20
// Decode a percent escape encoded string. 
- (NSString*) decodeFromPercentEscapeString:(NSString *) string { 
return (__bridge NSString *) CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, 
                 (__bridge CFStringRef) string, 
                 CFSTR(""), 
                 kCFStringEncodingUTF8); 
} 

http://cybersam.com/ios-dev/proper-url-percent-encoding-in-ios

यह पसंदीदा तरीका प्रतीत हो रहा है, क्योंकि ... "जाहिरा तौर पर" यह एक "बग" सेब के बारे में पता है, लेकिन वे अभी तक इसके बारे में कुछ नहीं किया है .. । (http://simonwoodside.com/weblog/2009/4/22/how_to_really_url_encode/)

+0

बिल्कुल सही! चीयर्स दोस्त! – Marcelo

1

तेज 2:

extension String { 

    func uriDecodedString() -> String? { 
     return self.stringByReplacingOccurrencesOfString("+", withString: " ").stringByRemovingPercentEncoding 
    } 

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