LoginSignup
4
2

[Swift] iOS17(Swift 5.9) で日本語ドメインのURLが生成できるようになってる!

Posted at

日本語ドメインのURLが生成できない!

iOS16以下(Swift5.9未満)は、日本語ドメインURLをURL(string:)に突っ込むとnilになっていました
ドメイン以外も、パラメータに日本語や特殊文字が含まれるような場合はnilになります

let url = URL(string: "https://日本語.jp")
// nil
let urlWithParam = URL(string: "https://日本語.jp?param=日本語&emoji=😃")
// nil

これに対応するにはpunycode対応したり、パーセントエンコードしたり、色々ツラミがありました

iOS16以下でもURLComponentsを使うとよしなにしてくれる

どのバージョン以上で対応されているかはわかりませんが、iOS16以下でもString -> URLの変換にURLComponentsを挟むといい感じにしてくれます

let url = URLComponents(string: "https://日本語.jp")?.url
// Optional(https://xn--wgv71a119e.jp)

let urlWithParam = URLComponents(string: "https://日本語.jp?param=日本語&emoji=😃")?.url
// Optional(https://xn--wgv71a119e.jp?param=%E6%97%A5%E6%9C%AC%E8%AA%9E&emoji=%F0%9F%98%83)

iOS17からは対応されたぞ!

iOS17からは文字列を突っ込むだけでいい感じにしてくれるようになりました :cat: !!!

let url = URL(string: "https://日本語.jp")
// Optional(https://xn--wgv71a119e.jp)
let urlWithParam = URL(string: "https://日本語.jp?param=日本語&emoji=😃")
// Optional(https://xn--wgv71a119e.jp?param=%E6%97%A5%E6%9C%AC%E8%AA%9E&emoji=%F0%9F%98%83)
4
2
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
4
2