gpt4 book ai didi

c# - UrlPathEncode() 替代方案

转载 作者:太空狗 更新时间:2023-10-29 23:13:50 25 4
gpt4 key购买 nike

MSDN page for UrlPathEncode指出不应使用 UrlPathEncode,我应该改用 UrlEncode。

Do not use; intended only for browser compatibility. Use UrlEncode.

但是UrlEncode不做与 UrlPathEncode 相同的事情。

我的用例是我想对文件系统路径进行编码,以便可以下载文件。路径中的空格需要转义,但正斜杠等不需要转义。UrlPathEncode 正是这样做的。

// given the path
string path = "Directory/Path to escape.exe";

Console.WriteLine(System.Web.HttpUtility.UrlPathEncode(path));
// returns "Installer/My%20Installer.msi" <- This is what I require

Console.WriteLine(System.Web.HttpUtility.UrlEncode(path));
// returns "Installer%2fMy+Installer.msi"

// none of these return what I require, either
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.ASCII));
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.BigEndianUnicode));
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.Default));
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.UTF32));
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.UTF7));
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.UTF8));
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.Unicode));

我尝试过的另一种方法是使用 Uri.EscapeDataString,但这会转义斜杠。

// returns Directory%2FPath%20to%20escape.exe
Console.WriteLine(Uri.EscapeDataString(path));

问题:

如果我不应该使用 UrlPathEncode,并且 UrlEncode 没有产生所需的输出,那么什么方法是等效的和推荐的?

最佳答案

有趣的是,当你试图正确地写出一个问题时,你会找到你的答案:

Uri.EscapeUriString(path);

产生所需的输出。

不过,我确实认为 MSDN 页面应该反射(reflect)这一点。

编辑(2020-11-22)

我最近又遇到了这个问题,但需要使用特殊字符(而不是带空格的文件名)对 URL 进行 URL 编码,但本质上是一样的。我这次使用的方法是实例化Uri类:

var urlWithSpecialChars = "https://www.example.net/something/contàins-spécial-chars?query-has=spécial-chars-as-well";

var uri = new Uri(urlWithSpecialChars);

// outputs "https://www.example.net/something/contàins-spécial-chars?query-has=spécial-chars-as-well"
Debug.WriteLine(uri.OriginalString);

// outputs "https://www.example.net/something/cont%C3%A0ins-sp%C3%A9cial-chars?query-has=sp%C3%A9cial-chars-as-well"
Debug.WriteLine(uri.AbsoluteUri);

// outputs "/something/cont%C3%A0ins-sp%C3%A9cial-chars?query-has=sp%C3%A9cial-chars-as-well"
Debug.WriteLine(uri.PathAndQuery);

这为您提供了很多有用的 Uri 属性,这些属性可能涵盖大多数/许多 Uri 处理要求: enter image description here

关于c# - UrlPathEncode() 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32253571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com