如何在C#中对字符串进行URL编码

时间:2014-02-25 12:13:08

标签: c# encoding url-encoding

我们如何使用C#中的URL(RFC 1738)标准对字符串进行编码?

以下在线工具使用此标准转换字符串http://www.freeformatter.com/url-encoder.html

我要转换的字符串示例是test(brackets),编码字符串应如下所示:

test%28brackets%29

3 个答案:

答案 0 :(得分:16)

Uri.EscapeDataString做你想要的。请参阅MSDN

答案 1 :(得分:6)

根据RFC 1738

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

HttpUtility.UrlEncodeWebUtility.UrlEncode都不会对这些字符进行编码,因为标准中的括号()可以使用未编码的字符。

我不知道为什么你链接的URL Encoder / Decoder会对它们进行编码,因为它还会将它们列为可以在网址中使用的字符。

答案 2 :(得分:0)

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();

如果您不需要编码的URL body ,则可能需要用键/值f欺骗周围。将该值留空。