我正在用 C# 进行编码,并且有一个文件的 URI(可以是 UNC、网络服务等,这就是我需要使用 URI 的原因),并且我遇到了 URI 指向名称中包含 #
的文件。
然后,URI 被解释为分段的一个 uri.Fragment
不为空,并且 uri.LocalPath
已损坏,指向由 URI 表示的假设位置,最多可达哈希值。
- 有没有办法让 Uri 类“理解”
#
是文件名的一部分? - 如果不是,如何很好地处理这个问题,因为我的例子中的片段包含更多特殊字符(汉字)并被转义,因此简单的字符串操作是不够的。
最佳答案
您可以使用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 形式将对 hash 字符进行转义,因为它在该用法中具有特殊含义。 LocalPath
属性将保留 hash 字符而不对其进行编码,因为它在该上下文中是合法的。
关于c# - 具有哈希和 Uri LocalPath 处理的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24366208/