文件名带有散列和Uri LocalPath处理
本文关键字:Uri LocalPath 处理 文件名 | 更新日期: 2023-09-27 18:09:48
我在c#中编码,我有一个URI到一个文件(可以是UNC, web服务等,这就是为什么我需要使用URI),我在一个情况下,URI指向一个包含#
在其名称的文件。
URI随后被解释为一个碎片化的URI, uri.Fragment
不是空的,uri.LocalPath
是破碎的,指向一个假设的位置,由URI表示到哈希。
- 是否有一种方法使Uri类"理解"
#
是文件名的一部分? - 如果没有,如何很好地处理这个问题,因为在我的情况下,片段包含进一步的特殊字符(Kanjis)并被转义,所以简单的字符串操作是不够的。
您可以使用System.UriBuilder
类
UriBuilder builder1 = new UriBuilder("http://yourdomain.com/");
builder1.Path = @"hello world#シンガポール国.txt";
Uri url1 = builder1.Uri;
System.Diagnostics.Debug.WriteLine(url1.ToString());
// -> http://yourdomain.com/hello world%23シンガポール国.txt
System.Diagnostics.Debug.WriteLine(url1.LocalPath);
// -> /hello world#シンガポール国.txt
在这种情况下,Fragment
属性保持空白。Uri
的URL形式将转义散列字符,因为它在该用法中具有特殊含义。LocalPath
属性将保留散列字符而不进行编码,因为它在该上下文中是合法的。