web-dev-qa-db-ja.com

C#で文字列をURLエンコードする方法

C#でURL(RFC 1738)標準を使用して文字列をエンコードするにはどうすればよいですか?

次のオンラインツールは、この標準を使用して文字列を変換しています http://www.freeformatter.com/url-encoder.html

変換する文字列の例はtest(brackets)で、エンコードされた文字列は次のようになります。

test%28brackets%29
12
rumi

RFC 1738 によると:

Thus, only alphanumerics, the special characters "$-_.+!*'(),", and
reserved characters used for their reserved purposes may be used
unencoded within a URL.

標準では括弧HttpUtility.UrlEncodeをエンコードせずに使用できると規定されているため、 WebUtility.UrlEncode() もこれらの文字をエンコードしません。

リンクされた RL Encoder/Decoder がそれらをエンコードする理由はわかりません。URLで使用できる文字としてもリストされているためです。

7
Dirk

Uri.EscapeDataString はあなたが望むことをします。 [〜#〜] msdn [〜#〜] を参照してください。

17
Thomas Hetzer

Uri.EscapeDataStringは、Uri標準を使用して文字列を変換しますが、これはRFC 1738に準拠していません。

RFC 1738は古いURL標準です。
FormUrlEncodedContent を使用してそれを達成しました:

data = new List<KeyValuePair<string, string>>();
data.Add(new KeyValuePair<string, string>("key", "value"));

var payloadBody = await new FormUrlEncodedContent(data).ReadAsStringAsync();

エンコードされたURLbodyが必要ない場合は、キー/値f.e.値を空にします。

0
Genfood