在使用标准C#代码和命令时,我遇到了以下问题:
Uri.EscapeUriString("[]")
I get :
"[]"
但是当我使用PowerShell时:
[Uri]::EscapeUriString("[]")
I get
"%5B%5D"
请问有人能解释一下这些方法调用的区别吗?为什么我得到了不同的结果?如何强制PowerShell返回与标准C#相同的结果?
谢谢!
在使用标准C#代码和命令时,我遇到了以下问题:
Uri.EscapeUriString("[]")
I get :
"[]"
但是当我使用PowerShell时:
[Uri]::EscapeUriString("[]")
I get
"%5B%5D"
请问有人能解释一下这些方法调用的区别吗?为什么我得到了不同的结果?如何强制PowerShell返回与标准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"
。
更新
在使用.NET 6+的PowerShell Core
中,相同的示例将返回所期望的[]
。
Add-Type
),并查看它是否返回与你的 PowerShell 命令相同的结果。 - marsze