29

stringByReplaceingPercentEscapesUsingEncoding メソッドは、% 文字 (つまり + 文字) で始まらない特殊記号をデコードしていないため、正しく機能していません。iOSでこれを行うためのより良い方法を知っている人はいますか?

これが私が現在使用しているものです:

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

出力の例を次に示します。

パス+with+スペース

4

5 に答える 5

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

プラスとスペースの置換は、application/x-www-form-urlencodedデータ (URL のクエリ文字列部分、またはPOST要求の本文) でのみ使用されることに注意してください。

于 2011-10-27T18:17:37.687 に答える
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/ )

于 2012-05-21T19:41:19.507 に答える
2

プラス記号をパーセント エスケープに置き換えようとしている場合は、"+" から " " (単一スペース) への文字列置換を実行します。次に、 を使用stringByAddingPercentEscapesUsingEncoding:してパーセント エスケープを追加します。

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

(stringByReplacingPercentEscapesUsingEncoding:パーセントエスケープをデコードします)

于 2011-10-27T18:14:04.053 に答える
1

スウィフト 2 :

extension String  {

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

}
于 2016-01-30T13:09:20.043 に答える