2011-10-27 18 views
29

stringByReplacingPercentEscapesUsingEncodingメソッドは、%文字、つまり+文字で始まらない特殊記号をデコードしないので、正しく動作しません。誰かがiOSでこれを行うためのより良い方法を知っていますか?iOSでデコードする方法 - Objective C

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

そして、ここでは、出力の例です:+スペース

+3

あなたのコードやその方法があなたのために正常に動作していない場所と方法の一例を投稿してくださいことはできますか? – Carter

+0

ちょうど、ありがとう。 – VinnyD

+0

+は有効なURL文字です。 – titaniumdecoy

答えて

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

注 - URLのクエリ文字列の一部、またはPOSTリクエストのボディ。

+2

デコードする必要がある+以外の文字がありますか? – VinnyD

+0

番号http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1 –

+0

@ "abcjhjhdfjhafjakhfjaklfj12346890(*^$#@@@#$%の文字列をデコードしようとしましたが、 ^^ ........ "このメソッドを使用すると、nilを返します。stringByReplacingPercentEscapesUsingEncodingは「変換が不可能な場合はnilを返します(つまり、パーセントエスケープではバイトシーケンスが合法ではない(NSURL.hから)。この問題に遭遇した人のために、私のようなカテゴリを作成するだけです。 –

1

パス+あなたが持つプラス記号を交換しようとしている場合はここ

は、私が現在使用してんですよエスケープ率は、 "+"から ""(単一スペース)への文字列置換を実行します。次に、stringByAddingPercentEscapesUsingEncoding:を使用してパーセントエスケープを追加します。

プラス記号は、決してコード化されていない多くの予約済みURL文字の1つです。

stringByReplacingPercentEscapesUsingEncoding:はパーセントエスケープをデコード)プラスのためのスペース置換はのみapplication/x-www-form-urlencodedデータで使用されていることを

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

SWIFT 2:

extension String { 

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

} 
関連する問題