Objective-Cの場合:
NSString *str = ...; // some URL
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
NSUTF8StringEncodingのセットはどこにありますか?
パーセントエンコーディングを可能にする6つのURLコンポーネントとサブコンポーネントには、事前定義された文字セットがあります。これらの文字セットはに渡され -stringByAddingPercentEncodingWithAllowedCharacters:
ます。
// Predefined character sets for the six URL components and subcomponents which allow percent encoding. These character sets are passed to -stringByAddingPercentEncodingWithAllowedCharacters:.
@interface NSCharacterSet (NSURLUtilities)
+ (NSCharacterSet *)URLUserAllowedCharacterSet;
+ (NSCharacterSet *)URLPasswordAllowedCharacterSet;
+ (NSCharacterSet *)URLHostAllowedCharacterSet;
+ (NSCharacterSet *)URLPathAllowedCharacterSet;
+ (NSCharacterSet *)URLQueryAllowedCharacterSet;
+ (NSCharacterSet *)URLFragmentAllowedCharacterSet;
@end
非推奨のメッセージは次のように述べています(鉱山を強調):
代わりにstringByAddingPercentEncodingWithAllowedCharacters(_ :)を使用します。これは、推奨されるUTF-8エンコーディングを常に使用し、特定のURLコンポーネントまたはサブコンポーネントをエンコードします。各URLコンポーネントまたはサブコンポーネントには、有効な文字に関する異なるルールがあるためです。
したがってNSCharacterSet
、引数として適切なものを指定するだけで済みます。幸い、URLにはURLHostAllowedCharacterSet
、次のように使用できる非常に便利なクラスメソッドがあります。
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
ただし、次のことに注意してください。
このメソッドは、URL文字列全体ではなく、URLコンポーネントまたはサブコンポーネント文字列をパーセントエンコードすることを目的としています。
NSURLComponents
パーセントエンコーディングを処理できるを使用することを強くお勧めします。