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

时间:2014-06-23 12:40:49

标签: c# file uri special-characters

我在C#中进行编码,并且我有一个文件的URI(可以是UNC,网络服务等,这就是我需要使用URI的原因)而且我跑了一个URI指向名称中包含#的文件的情况。

然后将URI解释为碎片化的uri.Fragment不为空并且uri.LocalPath被破坏,指向由URI表示直到散列的假设位置。

  1. 有没有办法让Uri班级#34;了解" #是文件名的一部分吗?
  2. 如果没有,如何处理这个很好,因为我的情况下的片段包含更多特殊字符(Kanjis)并被转义,所以简单的字符串操作是不够的。

1 个答案:

答案 0 :(得分:3)

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