Сначала давайте начнем с бизнеса UTF8. По сути, в этом случае их нет. Если строка содержит символы в стандартном диапазоне символов ASCII (как и ваш пароль), кодировка этой строки в кодировке UTF8 идентична однобайтовой строке ASCII.
Вы начинаете с этого: -
vtakyoj # "5
HttpUtility.UrlEncode
несколько агрессивно кодирует его в: -
vtakyoj% 23% 225
Он закодировал # и «однако только #» имеет особое значение в URL. Следовательно, при просмотре строкового значения объекта Uri в Silverlight вы видите: -
vtakyoj% 23" 5
Редактировать (отвечая на дополнительные вопросы)
Откуда оно знает, чтобы его расшифровать?
Все данные в URL должны быть правильно закодированы, что является частью действительного URL. Следовательно, веб-сервер может справедливо предположить, что все данные в строке запроса были соответствующим образом закодированы.
Что если бы у меня была настоящая строка с% 23 в ней?
Правильная кодировка для "% 23" будет "% 3723", где% 37 это%
Это документированная особенность запроса ["Password"], что он его декодирует?
Ну, я не знаю, вы бы проверили документацию, я думаю. Кстати, Request.QueryString["Password"]
использование этого же индексатора непосредственно на Request
было сделано для удобства переноса классического ASP на .NET. Это не имеет никакого реального значения, но лучше для ясности, поскольку легче провести различие между значениями QueryString
и Form
.
если я не использую UFT8, символы отфильтровываются.
Вы уверены, что в пароле могут присутствовать символы не ASCII? Можете ли вы привести пример, который в текущем примере не требуется кодировать с помощью UTF-8?