日本語を含む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