文件名带有散列和Uri LocalPath处理

本文关键字:Uri LocalPath 处理 文件名 | 更新日期: 2023-09-27 18:09:48

我在c#中编码,我有一个URI到一个文件(可以是UNC, web服务等,这就是为什么我需要使用URI),我在一个情况下,URI指向一个包含#在其名称的文件。

URI随后被解释为一个碎片化的URI, uri.Fragment不是空的,uri.LocalPath是破碎的,指向一个假设的位置,由URI表示到哈希。

  1. 是否有一种方法使Uri类"理解"#是文件名的一部分?
  2. 如果没有,如何很好地处理这个问题,因为在我的情况下,片段包含进一步的特殊字符(Kanjis)并被转义,所以简单的字符串操作是不够的。

文件名带有散列和Uri LocalPath处理

您可以使用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属性将保留散列字符而不进行编码,因为它在该上下文中是合法的。