使用标准C#代码和命令时出现以下问题:
Uri.EscapeUriString("[]")
我明白了:
"[]"
但是当我使用PowerShell时:
[Uri]::EscapeUriString("[]")
我知道
"%5B%5D"
有人可以解释一下这些方法调用之间的区别吗? 为什么我得到不同的结果?如何强制PowerShell返回与标准C#相同的结果? 预先感谢
答案 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"
。