Как заменить специальные символы в URL?

Это, наверное, очень просто, но я просто не могу найти ответ сам:(

В основном, я хочу, учитывая эту строку:

" http://www.google.com/search?hl=en&q=c# objects"

Я хочу этот вывод:

http://www.google.com/search?hl=en&q=c%23+objects

Я уверен, что есть какой-то вспомогательный класс, где-то похоронен в Framework, который позаботится об этом для меня, но мне трудно найти его.

EDIT: я должен добавить, что это для Winforms App.

Ответы

Ответ 1

HttpServerUtility.UrlEncode(строка)

Должны разбираться любые неприятные символы

Чтобы использовать его, вам нужно добавить ссылку на System.Web(Project Explorer > Ссылки > Добавить ссылку > System.Web)

Как только вы это сделали, вы можете использовать его для кодирования любых элементов, которые вы хотите добавить в строку запроса:

System.Web.HttpUtility.UrlEncode("c# objects");

Ответ 2

Если вам не нужна зависимость от System.Web, это реализация "UrlEncode", которая у меня есть в моей библиотеке С# OAuth (для которой требуется правильная реализация, а именно, пробелы должны быть закодированы с использованием процентного кодирования, а "+" - для пробелов и т.д.)

private readonly static string reservedCharacters = "!*'();:@&=+$,/?%#[]";

public static string UrlEncode(string value)
{
    if (String.IsNullOrEmpty(value))
        return String.Empty;

    var sb = new StringBuilder();

    foreach (char @char in value)
    {
        if (reservedCharacters.IndexOf(@char) == -1)
            sb.Append(@char);
        else
            sb.AppendFormat("%{0:X2}", (int)@char);
    }
    return sb.ToString();
}

Для справки http://en.wikipedia.org/wiki/Percent-encoding

Ответ 3

@Wilfred Knievel имеет принятый ответ, но вы также можете использовать Uri.EscapeUriString(), если хотите избежать зависимости от пространства имен System.Web.