Вместо этого вы можете использовать HttpServerUtility.UrlEncode.
Документация Майкрософт по адресу Microsoft.JScript.GlobalObject.escape гласит, что она не предназначена для использования непосредственно из вашего кода.
Edit:
Как я уже говорил в комментариях: Два метода кодирования по-разному и Request.QueryString ожидает кодировку, используемую HttpServerUtility.UrlEncode, поскольку он внутренне использует HttpUtility.UrlDecode.
(HttpServerUtility.UrlEncode фактически использует HttpUtility.UrlEncode внутренне.)
Вы можете легко увидеть разницу между этими двумя методами.
Создание нового веб-приложения ASP.NET, добавьте ссылку на Microsoft.JScript затем добавьте следующий код:
protected void Page_Load(object sender, EventArgs e)
{
var msEncode = Microsoft.JScript.GlobalObject.escape("áíóú");
var httpEncode = Server.UrlEncode("áíóú");
if (Request.QueryString["a"] == null)
{
var url = "/default.aspx?a=" + msEncode + "&b=" + httpEncode;
Response.Redirect(url);
}
else
{
Response.Write(msEncode + "<br />");
Response.Write(httpEncode + "<br /><br />");
Response.Write(Request.QueryString["a"] + "<br />");
Response.Write(Request.QueryString["b"]);
}
}
Результат должен быть:
%E1%ED%F3%FA
%c3%a1%c3%ad%c3%b3%c3%ba
����
áíóú
Что происходит, когда вы делаете строку badDecode = Request.QueryString [ "а"]. ToString() ;? ToString() - специфический для локали поток и иногда может делать магию. –