【问题标题】:How to URL encode strings in C#如何在 C# 中对字符串进行 URL 编码
【发布时间】:2014-03-27 15:46:31
【问题描述】:

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

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

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

test%28brackets%29

【问题讨论】:

标签: c# encoding url-encoding


【解决方案1】:

Uri.EscapeDataString 做你想做的事。见MSDN

【讨论】:

  • 对不起,它不起作用。试过这个字符串 str = "test(brackets)"; str = Uri.EscapeDataString(str);
  • 奇怪。当我尝试 "string result = Uri.EscapeDataString("test(brackets)");"结果是“test%28brackets%29”。在你的系统上 EscapeDataString 之后 str 有什么值?
  • 字符串保持不变。它不会改变
  • Uri.EscapeDataString changed with .NET 4.5 包含 RFC 3986 字符的行为。
  • @Dirk:感谢您提供的信息。事实上,我的目标是 .NET 4.5。
【解决方案2】:

根据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 为什么会对它们进行编码,因为它还将它们列为可在 URL 中使用的字符。

【讨论】:

  • 我正在通过 HTTP 调用第三方 API 并在参数中传递一个字符串。此字符串是 UTF-8 URL 编码的。我的 API 客户端是用 asp.net C# 编写的,而 API 主机可能是用 Java 编写的。当我在字符串参数中有括号/括号 () 之类的字符时,UTF-8 编码器不会对它们进行编码,而 API 主机将它们编码为 %28 和 %29 并且我得到不正确的响应。有什么建议可以解决这个问题吗?
  • 你可以看看这个:stackoverflow.com/questions/846487/…
【解决方案3】:

Uri.EscapeDataString 将使用不符合 RFC 1738 的 Uri 标准转换字符串。

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.e 来欺骗 arround。让值为空。

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2022-03-01
    相关资源
    最近更新 更多