1. ホーム
  2. ios

[解決済み] ios9のstringByAddingPercentEscapesUsingEncodingの置き換え?

2022-05-15 20:25:57

質問

iOS8以前で使用することはできますか?

NSString *str = ...; // some URL
NSString *result = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

iOS9では stringByAddingPercentEscapesUsingEncodingstringByAddingPercentEncodingWithAllowedCharacters :

NSString *str = ...; // some URL
NSCharacterSet *set = ???; // where to find set for NSUTF8StringEncoding?
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];

そして私の質問は、どこで必要な NSCharacterSet ( NSUTF8StringEncoding ) の適切な置き換えのために stringByAddingPercentEscapesUsingEncoding ?

どのように解決するのですか?

非推奨のメッセージにはこう書かれています(強調)。

代わりにstringByAddingPercentEncodingWithAllowedCharacters(_:)を使ってください。 これは常に推奨されるUTF-8エンコーディングを使用します。 また、URL コンポーネントやサブコンポーネントごとに有効な文字の規則が異なるため、特定の URL コンポーネントやサブコンポーネントのためにエンコードされます。

そのため、適切な NSCharacterSet を引数として与えるだけです。幸いなことに、URL の場合は URLHostAllowedCharacterSet という非常に便利なクラスメソッドがあり、これを使えば次のようになります。

let encodedHost = unencodedHost.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())

の更新 Swift 3 -- メソッドが静的プロパティになる urlHostAllowed :

let encodedHost = unencodedHost.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

注意することですが

このメソッドはURLのコンポーネントやサブコンポーネントの文字列をパーセントエンコードするためのものであり、URLの文字列全体をパーセントエンコードするためのものではありません。