.Net FrameworkのUriエンコードメソッドの違い

2010年7月16日

.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で増える予約記号「!’*()」を後から置換するのが現実的かも。

コメントは受け付けていません。