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に画像が読み込まれません。
解決
使用:stringByAddingPercentEscapesUsingEncoding:
指定されたエンコードを使用して受信者の表現を返し、受信者を正当なURL文字列に変換するために必要なパーセントエスケープを決定します。
-(NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
エンコードを使用して受信者を表現し、受信者を有効なURL文字列に変換するために必要なパーセントエスケープを決定します。エンコードが特定の文字をエンコードできない場合、nilを返します
@ruleによるリクエストごとに追加
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'
他のヒント
swift 3.0のアプローチ(stringByAddingPercentEscapesUsingEncodingおよびstringByAddingPercentEncodingWithAllowedCharactersは非推奨になりました):
let urlString ="your/url/".addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)
stringByAddingPercentEscapesUsingEncoding
はiOS 9.0で非推奨になりました。代わりに stringByAddingPercentEncodingWithAllowedCharacters
を使用することをお勧めします。
これは>のObjective-Cコードです。 iOS 9.0
NSString* urlText = @"70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg";
NSString* urlTextEscaped = [urlText stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url = [NSURL URLWithString: urlTextEscaped];
enter code here
NSLog(@"urlText: '%@'", urlText);
NSLog(@"urlTextEscaped: '%@'", urlTextEscaped);
NSLog(@"url: '%@'", url);