概要
URL(string: String)
やNSURL(string: String)
を利用してStringをURLやNSURLにしようとする時に、
.swift
let urlString: String = "https://google.com/search?q=ドラゴンクエスト"
let url = URL(string: urlString) //nil
こんな感じで URLにする文字列自体に日本語が含まれている とnil
が返ってきてしまいます。
解決策
文字列にパーセントエンコーディングをかけることで無事に変換できるようになります。
.swift
let urlString: String = "https://google.com/search?q=ドラゴンクエスト"
let encodeUrlString: String = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url = URL(string: encodeUrlString)
//https://google.com/search?q=%E3%83%89%E3%83%A9%E3%82%B4%E3%83%B3%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88
ちなみにデコードは.removingPercentEncoding
で可能です。
.swift
let urlString: String = "https://google.com/search?q=%E3%83%89%E3%83%A9%E3%82%B4%E3%83%B3%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88"
let decodeUrlString: String = urlString.removingPercentEncoding
//https://google.com/search?q=ドラゴンクエスト
余談 : パーセントエンコーディングとは
パーセントエンコーディングとは、ざっくり説明すると URLで使えない文字をパーセント(%)と英数字の組み合わせで表現すること です。
例えばひらがなの「あ」は「%E3%81%82」、「い」は「%E3%81%84」のように表現されます。
普段我々が日本語のキーワードで検索をしている時も、URLにはパーセントエンコーディングが使われています。
おわりに
いまドラクエ11を絶賛進行中です。セーニャかわいい。