日本語を含むURLからNSURLを作成する方法 (Swift)

投稿者 : OSCA

[PR] "東野・岡村の旅猿"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

 RSSで取得したURLを扱う処理を書いていたところ、日本語を含むURLを処理をしようとしたところエラーが発生しました。 そんな場合の対処方法を記します。

問題

 次のような処理を記述していたところ、NSURLが nil になってしまいました。 理由は引数で与えた url 文字列に日本語を含んでいた為でした。

var url = "https://sample.jp/サムネイル.jpg"
var nsurl = NSURL(string:url)

解決方法

 Swift 3 以降の解決方法としては、String クラスの addingPercentEncoding() メソッドを利用することで、文字列中の日本語をパーセントエンコーディングしてくれます。 修正後のソースコードは次のようになります。

var url = "https://sample.jp/サムネイル.jpg"
var encurl = url.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
var nsurl = NSURL(string:url)

 変数 url と encurl をそれぞれ出力してみると、次のようになります。

url : https://sample.jp/サムネイル.jpg
encurl : https://sample.jp/%E3%82%B5%E3%83%A0%E3%83%8D%E3%82%A4%E3%83%AB.jpg

おわりに

 本稿では日本語を含むURLからNSURLを作成する方法について解説しました。 皆さまのお仕事のお役に立てれば幸いです。

Swiftのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca