Powershell与C#EscapeUriString的不同结果

时间:2018-10-01 10:07:15

标签: c# .net powershell

使用标准C#代码和命令时出现以下问题:

Uri.EscapeUriString("[]")

我明白了:

"[]"

但是当我使用PowerShell时:

[Uri]::EscapeUriString("[]") 

我知道

"%5B%5D"

有人可以解释一下这些方法调用之间的区别吗? 为什么我得到不同的结果?如何强制PowerShell返回与标准C#相同的结果? 预先感谢

1 个答案:

答案 0 :(得分:2)

这似乎与.NET版本有关。您的C#代码可能使用的是最新版本。

C#

// .NET 4.0
Uri.EscapeUriString("[]"); // OUTPUT: "%5B%5D"

// .NET 4.5
Uri.EscapeUriString("[]"); // OUTPUT: "[]"

PowerShell

# v5
[Uri]::EscapeUriString("[]") # OUTPUT: "%5B%5D"

# for reference
Add-Type "
using System;
namespace PowerShell
{
    public static class Uri
    {
        public static string EscapeUriString(string stringToEscape)
        {
            return System.Uri.EscapeUriString(stringToEscape);
        }
    }
}"
[PowerShell.Uri]::EscapeUriString("[]") # OUTPUT: "%5B%5D"

没有“标准C#”。解决方案是确保两者都使用相同的.NET版本,或实现自己的转义方法。

或者,使用System.Net.WebUtility.UrlEncode似乎在两种情况下都返回"%5B%5D"