Powershell против C # EscapeUriString разные результаты - PullRequest
0 голосов
/ 01 октября 2018

У меня возникает следующая проблема при использовании стандартного кода C # и команды:

Uri.EscapeUriString("[]")

Я получаю:

"[]"

, но когда я использую PowerShell:

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

Я получаю

"%5B%5D"

Может кто-нибудь объяснить, в чем отличие этих вызовов методов?И почему я получаю разные результаты?Как заставить PowerShell возвращать те же результаты, что и стандартный c #?Заранее спасибо

1 Ответ

0 голосов
/ 01 октября 2018

Это похоже на версию .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, или реализовать свой собственный метод escape.

В качестве альтернативы используйте System.Net.WebUtility.UrlEncode, который, по-видимому, возвращает "%5B%5D" в обоих случаях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...