StringByReplacingPercentEscapesUsingEncodingメソッドは、%文字、つまり+文字で始まらない特別なシンボルをデコードしていないため、正しく機能していません。 iOSでこれを行うより良い方法を知っている人はいますか?
私が現在使用しているものは次のとおりです。
NSString *path = [@"path+with+spaces"
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
次に、出力の例を示します。
path + with + spaces
NSString *path = [[@"path+with+spaces"
stringByReplacingOccurrencesOfString:@"+" withString:@" "]
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
スペースのプラス置換は、application/x-www-form-urlencoded
データ(URLのクエリ文字列部分、またはPOST
要求の本文)でのみ使用されることに注意してください。
// 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
これは、「どうやら」これは「バグ」であるためです。Appleは認識していますが、まだ何もしていません...( http:/ /simonwoodside.com/weblog/2009/4/22/how_to_really_url_encode/ )
プラス記号をパーセントエスケープで置き換えようとしている場合は、「+」から「」(単一スペース)への文字列置換を実行します。次に、stringByAddingPercentEscapesUsingEncoding:
を使用して、パーセントエスケープを追加します。
プラス記号は、エンコードされない多くの予約済みURL文字の1つです。
(stringByReplacingPercentEscapesUsingEncoding:
はエスケープのパーセントをデコードします)
スイフト2:
extension String {
func uriDecodedString() -> String? {
return self.stringByReplacingOccurrencesOfString("+", withString: " ").stringByRemovingPercentEncoding
}
}
また、CocoapodsのPercentEncoderライブラリを使用できます。
Swift 4
ライブラリをPodfileに含めます。
ポッドPercentEncoder
ライブラリPercentEncoderをインポートします
PercentEncoderをインポート
クラスViewController {
...
}
「+」文字を「%20」に置き換え、「ped_decodeURI」メソッドを使用します
"path + with + spaces" .replacingOccurrences(of: "+"、with: "%20")。ped_decodeURI()
「スペースのあるパス」を返します
ここに参照用リンク: https://cocoapods.org/pods/PercentEncoder