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

本文关键字:不正确 添加 字符串 EscapeDataString Uri 解码 | 更新日期: 2023-09-27 18:31:41

我正在尝试使用Uri.EscapeDataString对网址进行UrlEncode,但结果不正确。下面是一个示例:

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不是"%"的编码吗?我的原始字符串中没有%...这是怎么回事?

编辑:我不能为这个项目使用System.Web assembly,所以不幸的是我不能为此使用HttpUtility.UrlEncode()方法。

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

好吧,在搜索了更多之后,似乎这可以完成工作,而无需依赖系统网络:

System.Net.WebUtility.UrlEncode(url);

编码是正确的,没有%25

Uri.EscapeDataString

对URL进行编码。请改用 HttpUtility.UrlEncode。

string url = "https://mega.co.nz/#!GVZFwAbB!NzdN2jp7A_WmQBLC4RJrCX8SzixFIEo7oZZARaMAmXQ";
string encodedUrl = HttpUtility.UrlEncode(url);

结果是:

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