Yaw*_*awe 6 .net c# powershell
使用标准C#代码和命令时出现以下问题:
Uri.EscapeUriString("[]")
Run Code Online (Sandbox Code Playgroud)
我明白了:
"[]"
Run Code Online (Sandbox Code Playgroud)
但是当我使用PowerShell时:
[Uri]::EscapeUriString("[]")
Run Code Online (Sandbox Code Playgroud)
我明白了
"%5B%5D"
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这些方法调用的区别吗?为什么我会得到不同的结果?如何强制PowerShell返回与标准c#相同的结果?提前致谢
这似乎与 .NET 版本相关。您的 C# 代码可能使用更新的版本。
C#
// .NET 4.0
Uri.EscapeUriString("[]"); // OUTPUT: "%5B%5D"
// .NET 4.5
Uri.EscapeUriString("[]"); // OUTPUT: "[]"
Run Code Online (Sandbox Code Playgroud)
电源外壳
# 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"
Run Code Online (Sandbox Code Playgroud)
不存在“标准 C#”。解决方案是确保两者使用相同的 .NET 版本,或者实现您自己的转义方法。
或者,使用System.Net.WebUtility.UrlEncode
which 似乎"%5B%5D"
在这两种情况下都会返回。
更新
在PowerShell Core
(使用 .NET 6+)中,相同的示例[]
按预期返回。
归档时间: |
|
查看次数: |
75 次 |
最近记录: |