如何正确使用网址编码和解码
本文关键字:编码 解码 何正确 | 更新日期: 2023-09-27 18:36:29
所以我有一个文件要上传到 azure blob 存储:
C:''test folder''A+B''testfile.txt
以及两个扩展方法,可帮助对我的路径进行编码,以确保为其提供有效的 Azure 存储 blob 名称
public static string AsUriPath(this string filePath)
{
return System.Web.HttpUtility.UrlPathEncode(filePath.Replace('''', '/'));
}
public static string AsFilePath(this string uriPath)
{
return System.Web.HttpUtility.UrlDecode(uriPath.Replace('/', ''''));
}
因此,在上传文件时,我AsUriPath
对其进行编码并获取名称test%20folder'A+B'testfile.txt
但是当我尝试将其作为文件路径恢复时,我得到test folder'A B'testfile.txt
显然不一样(+
已被删除)
使用UrlEncode和UrlDecode的正确方法是什么,以确保您将获得与最初编码相同的信息解码?
如果您使用 WebUtility.UrlEncode
而不是 HttpUtility.UrlPathEncode
,它就可以工作
如果你查看HttpUtility.UrlPathEncode上的文档,你会看到它指出:
请勿使用;仅用于浏览器兼容性。使用 UrlEncode。
我已经编写了一个简单的示例,可以粘贴到控制台应用程序中(您需要引用 System.Web 程序集)
static void Main(string[] args)
{
string filePath = @"C:'test folder'A+B'testfile.txt";
var encoded = WebUtility.UrlEncode(filePath.Replace('''', '/'));
var decoded = WebUtility.UrlDecode(encoded.Replace('/', ''''));
Console.WriteLine(decoded);
}
在此.NET小提琴上运行它
使用 System.Uri
类正确编码路径:MSDN System.Uri
在路径上尝试以下操作,并使用调试器进行检查:
var myUri = new System.Uri("http://someurl.com/my special path + is this/page?param=2");
var thePathAndQuery = myUri.PathAndQuery;
var theAbsolutePath = myUri.AbsolutePath;
var theAbsoluteUri = myUri.AbsoluteUri;