web-dev-qa-db-ja.com

NSData&NSURL-問題のあるスペースのあるURL

アプリケーションに次のコードがあります。

NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:pathOfThumbNail]];

pathOfThumbNailには次のパスがあります


http://70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg


上記のパスをSafariブラウザで開くと、パスが自動的に変更され、画像が正常に表示されます。

http://70.84.58.40/projects/igolf/TipThumb/GOLF%2058B.jpg


しかし、iPhoneでは、パスにスペースがあるため、画像はnsdataに読み込まれません。

38

使用:stringByAddingPercentEscapesUsingEncoding:

指定されたエンコーディングを使用してレシーバーの表現を返し、レシーバーを有効なURL文字列に変換するために必要なパーセントエスケープを決定します。

-(NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

エンコードを使用して、レシーバーを有効なURL文字列に変換するために必要なパーセントエスケープを決定するレシーバーの表現。エンコーディングが特定の文字をエンコードできない場合はnilを返します

@ルールによってリクエストごとに追加されました

NSString* urlText = @"70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg";
NSString* urlTextEscaped = [urlText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString: urlTextEscaped];
NSLog(@"urlText:        '%@'", urlText);
NSLog(@"urlTextEscaped: '%@'", urlTextEscaped);
NSLog(@"url:            '%@'", url);

NSLog出力:

 urlText:'70 .84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg '
 urlTextEscaped:'70 .84.58.40/projects/igolf/TipThumb/GOLF%2058B.jpg' 
 url:'70 .84.58.40/projects/igolf/TipThumb/GOLF%2058B.jpg '
98
zaph

A Swift 3.0アプローチ(stringByAddingPercentEscapesUsingEncodingおよびstringByAddingPercentEncodingWithAllowedCharactersは現在非推奨のようです):

let urlString ="your/url/".addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)
14
Niko Zarzani

stringByAddingPercentEscapesUsingEncodingはiOS 9.0で廃止されました。代わりにstringByAddingPercentEncodingWithAllowedCharactersを使用することをお勧めします。

IOS 9.0以上のObjective-Cコードは次のとおりです

NSString* urlText = @"70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg";
NSString* urlTextEscaped = [urlText stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url = [NSURL URLWithString: urlTextEscaped];

NSLog(@"urlText:        '%@'", urlText);
NSLog(@"urlTextEscaped: '%@'", urlTextEscaped);
NSLog(@"url:            '%@'", url);
4
Priest