Вы можете попробовать вместо этого использовать HttpServerUtility.UrlEncode .
Документация Microsoft по 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
����
áíóú