.Net FrameworkにはUriエンコードに使うメソッドがいくつかあるが、違いを調べてみた。
- Uri.EscapeDataString(str)
- RFC2396準拠。16進数は大文字になる。
- Uri.EscapeUriString(str)
- EscapeDataStringよりエンコードしない記号が増える。「&+,/:;=?」
16進数は大文字。 - Url全体をまるごと処理することを想定?
- HttpUtility.UrlEncode(str)
- EscapeDataStringと違うのは、空白を%20でなく「+」に変える。
「~」を%7eに変える。「’」を%27に変える。
16進数は小文字。
application/x-www-form-urlencodedに使うことを想定?
Uriクラスのメソッドは、国際化リソース識別子 (IRI) または国際化ドメイン名 (IDN) 解析を有効に設定するとRFC3986準拠になるようだが、システム全体が変わってしまうようなので、個別にやるにはRFC3986で増える予約記号「!’*()」を後から置換するのが現実的かも。