面白きことは良きことなり

拙く未熟なiOSエンジニアの備忘録と戯言

URLComponentsは、`+`をPercent Encodingしてくれない

経緯

APIを叩く際にランダムに生成しな内容をBASE64化してQueryにつけて送信しようとしていたが、5割ぐらいのエラーになっていた。
調査した結果、+がPercent Encodingされていないためだったが、なぜこんなことが起きたのか…。

便利なURLComponentsの罠

qiita.com

この記事でURLComponentsという便利なものがある!自前でPercent EncodingしてQuery作らなくていいんだ!とうっきうきで使っていたわけだが、+はPercent Encodingしてくれない。(ちなみに+をPercent Encodingすると%2Bになる)

stackoverflow.com

なぜ起こったか

今回のようなことが何故起こったのか。

URLComponentsは、説明にRFC 3986に準拠していると記載されている。サーバ側がRFC 3986に準拠していない作りが理由とも言えるし、自分がそこを確認怠り、URLComponentsを使用したのが理由とも言える。

URLComponents - Foundation | Apple Developer Documentation

サーバの作り次第で、このあたりはいくらでも変わるので、気をつけたいところ。

今回は、時間やコードの手戻りが厳しいこともありURLComponentsでQueryを付けた後、+%2Bに置換する力技で解決した。

URLComponentsに頼らない自作URLComponentsのようなものを作ってもいいかもしれないと思った。