C#Uri.EscapeDataString添加了不正确的";%25“;在解码字符串中

C#Uri.EscapeDataString添加了不正确的";%25“;在解码字符串中,c#,urlencode,C#,Urlencode,我正在尝试使用Uri.EscapeDataString对web地址进行URL编码,但结果不正确。下面是一个例子: string url = "https://mega.co.nz/#!GVZFwAbB!NzdN2jp7A_WmQBLC4RJrCX8SzixFIEo7oZZARaMAmXQ"; string encodedUrl = Uri.EscapeDataString(url); 预期结果将是: https%3a%2f%2fmega.co.nz%2f%23!GVZFwAbB!NzdN2jp

我正在尝试使用Uri.EscapeDataString对web地址进行URL编码,但结果不正确。下面是一个例子:

string url = "https://mega.co.nz/#!GVZFwAbB!NzdN2jp7A_WmQBLC4RJrCX8SzixFIEo7oZZARaMAmXQ";
string encodedUrl = Uri.EscapeDataString(url);
预期结果将是:

https%3a%2f%2fmega.co.nz%2f%23!GVZFwAbB!NzdN2jp7A_WmQBLC4RJrCX8SzixFIEo7oZZARaMAmXQ
但实际情况是:

https%253a%252f%252fmega.co.nz%252f%2523%21GVZFwAbB%21NzdN2jp7A_WmQBLC4RJrCX8SzixFIEo7oZZARaMAmXQ
如您所见,有一堆额外的
%25
不属于那里。
%25
不是“
%
”的编码吗?我的原始字符串中没有
%
s。。。发生什么事了


编辑:我无法在此项目中使用
System.Web程序集
,因此很遗憾,我无法使用
HttpUtility.UrlEncode()
方法进行此操作。

Uri.EscapeDataString
不编码URL。改用

结果是:

https%3a%2f%2fmega.co.nz%2f%23!GVZFwAbB!NzdN2jp7A_WmQBLC4RJrCX8SzixFIEo7oZZARaMAmXQ

好吧,在多搜索了一点之后,似乎这就完成了任务,而不依赖于系统web:

System.Net.WebUtility.UrlEncode(url);

编码是正确的,没有
%25
s.

不幸的是,由于我不想让您感到厌烦的原因,我无法将System.Web程序集用于此项目,因此我无法使用HttpUtility这很奇怪,但您的代码工作正常,我没有看到这种情况发生
Uri.EscapeDataString
返回
https%3A%2F%2Fmega.co.nz%2F%23!GVZFwAbB!NzdN2jp7A_WmQBLC4RJrCX8SzixFIEo7oZZARaMAmXQ
适合我。显然,返回的值稍后会在您的项目中再次编码。@Hamlet Hakobyan和GSerg:嗯,这里已经有一个不一致的地方:Hamlet的JSFIDLE将“!”编码为“%21”,而您的字符串仍然有“!”。在我的机器上,它添加了%25并将“!”转换为“%21”。它在每台机器上的表现似乎不同。。。老实说,我真是不知所措。GSerg输出是唯一正确的,但我不知道如何获得它…它取决于.NET版本。v4.5编码
但v4.0没有..NET v4.5编码
作为
%21
,.NET v4及以下版本保留为
。两个版本均不对
%25
进行双重编码。我相信
毕竟不是问题,您应该在项目中找到发生第二次编码的位置(可能由您正在使用的框架隐式完成)。
System.Net.WebUtility.UrlEncode(url);