ASP.NET和Ajax:使用ISO-8859-1编码查询字符串参数
这里还有一个问题需要您帮助我解决:我有一个ASP.NET网站,它使用AJAX异步调用am.ashx处理程序,传递查询字符串参数以从数据库获取一些信息 下面是一个如何工作的示例: 对处理程序进行异步调用的客户端Javascript代码段:ASP.NET和Ajax:使用ISO-8859-1编码查询字符串参数,asp.net,javascript,ajax,character-encoding,query-string,Asp.net,Javascript,Ajax,Character Encoding,Query String,这里还有一个问题需要您帮助我解决:我有一个ASP.NET网站,它使用AJAX异步调用am.ashx处理程序,传递查询字符串参数以从数据库获取一些信息 下面是一个如何工作的示例: 对处理程序进行异步调用的客户端Javascript代码段: /* Capture selected value from a DropDownBox */ var dropdown = document.getElementById(DropDownID); var selectedValue = dropdown.op
/* Capture selected value from a DropDownBox */
var dropdown = document.getElementById(DropDownID);
var selectedValue = dropdown.options[dropdown.selectedIndex].value;
/* Make the call to the handler */
var url = "MyHandler.ashx?param=" + selectedValue;
var ajaxObj = new Ajax();
ajaxObj.doRequest(url, MyCallback, args, connectionFailed);
当我第一次加载包含这个AJAX调用的webform时,它会将正确的查询字符串发送给我在VisualStudio中使用debug检查过的处理程序,比如param=Street Joseph Blíss。这是我想要的正确行为
问题是,当我再次加载该webform以及所有后续时间时,Blíss中的í字符在服务器端显示为Ã-。因为这是我试图在服务器端数据库访问脚本上选择的实体的密钥,所以它在第一次Web表单加载时不起作用
我尝试在客户端对查询字符串进行编码,并在服务器端对其进行解码,如下所示:
客户端Javascript:
var encodedParam = encodeURIComponent(selectedValue);
/* Make the call to the handler */
var url = "MyHandler.ashx?param=" + encodedParam ;
服务器端ASP.NET,C:
string encodedParam = context.Request.QueryString["param"];
string value = HttpUtility.UrlDecode(encodedParam, Encoding.ASCII);
……但我运气不好,问题仍然存在。有什么帮助吗?在进一步搜索之后,我发现了如何使用服务器端代码优化来解决问题。交易如下: 我必须修改.ashx处理程序来解析从查询字符串中获取的原始参数,并将其转换为UTF-8。下面是它的制作方法:
// original parameterized value with invalid characters
string paramQs = context.Request.QueryString["param"];
// correct parsed value from query string parameter
string param = Encoding.UTF8.GetString(Encoding.GetEncoding("iso8859-1").GetBytes(paramQs));
祝大家编码愉快 它不应该是iso-8859-1吗,如这里所述?