Err*_*sen 5 c# encoding escaping http
该用于UrlPathEncode MSDN页陈述了UrlPathEncode不应该被使用,并且,我应该使用以UrlEncode来代替。
不使用; 仅用于浏览器兼容性。使用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));
Run Code Online (Sandbox Code Playgroud)
我尝试过的另一种方法是使用Uri.EscapeDataString,但这会转义斜线。
// returns Directory%2FPath%20to%20escape.exe
Console.WriteLine(Uri.EscapeDataString(path));
Run Code Online (Sandbox Code Playgroud)
如果我不应该使用UrlPathEncode,并且UrlEncode没有产生所需的输出,那么什么方法等效并建议使用?
有趣的是,当尝试正确编写问题时,您会找到答案:
Uri.EscapeUriString(path);
Run Code Online (Sandbox Code Playgroud)
产生所需的输出。
我确实认为MSDN页面应该反映这一点。
| 归档时间: |
|
| 查看次数: |
797 次 |
| 最近记录: |