42
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Swift】日本語を含んだ文字列をURLやNSURLにするとnilになる

Last updated at Posted at 2019-02-19

概要

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を絶賛進行中です。セーニャかわいい。

42
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?