【问题标题】:Removing %20 from URI Relative Path从 URI 相对路径中删除 %20
【发布时间】:2011-04-18 17:27:28
【问题描述】:

我正在生成从 1 个目录到另一个目录的相对路径。如果 OutputDirectoryName 属性是包含空格的目录,则使用 %20 而不是空格对空格进行编码。我正在创建一个 Windows 文件夹的相对路径,所以我的相对路径必须使用空格。有没有一种干净的方法来指定 URI 的编码方式?我知道我可以在 relativePath.ToString() 上进行替换,但我想知道是否有更好的实现。 谢谢。

public string GetOutputDirectoryAsRelativePath(string baseDirectory)
{
    Uri baseUri = new Uri(baseDirectory);
    Uri destinationUri = new Uri(OutputDirectoryName);
    Uri relativePath = baseUri.MakeRelativeUri(destinationUri);
    return relativePath.ToString();
}

【问题讨论】:

  • 为什么需要用空格替换 %20 ?这是在 URI 中表示空格的正确方法。如果您将字符串传递给期望 URI 的代码,那么它将知道 %20 表示空格。
  • @andy:他可能想要一个不是 URL 编码的 Windows 文件路径。
  • @SLarks,没错。 @andynormancx,“我正在创建 Windows 文件夹的相对路径”
  • 简单地替换 %20 绝对不是要走的路。 Windows 路径中还有其他有效字符将由 Uri 类编码。使用 Uri.UnescapeDataString 对我来说似乎是最好的选择。
  • @andy,你是对的。这不在答案部分,所以它必须去达斯。谢谢!

标签: c# uri relative-path


【解决方案1】:

【讨论】:

  • 这就是票。尽管安迪首先将其添加为评论。
  • 不,达斯公平地击败了我。我只是指出了为什么需要 UnescapeDataString 而不仅仅是替换 %20
【解决方案2】:
string sRelativeFilePath = Uri.UnescapeDataString(new Uri(sAbsolutePath + "\\", false).MakeRelative(new Uri(filename)));

【讨论】:

    【解决方案3】:
    【解决方案4】:

    尝试查看 Server.UrlDecode: http://msdn.microsoft.com/en-us/library/6196h3wt.aspx

    空格字符不是唯一被编码的字符。

    【讨论】:

    • Server.UrlDecode() 即使在我的 csproj 中引用 System.Web 后也无法解析。奇怪...
    猜你喜欢
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2011-08-25
    • 2012-10-02
    • 2022-01-17
    • 2015-12-03
    • 2014-03-30
    • 1970-01-01
    相关资源
    最近更新 更多