这是另一个帮助我解决的问题:我有一个ASP.NET网站,它使用AJAX(异步)调用am .ashx
处理程序,传递查询字符串参数来获取来自数据库的一些信息。
以下是其工作原理的示例:
客户端(Javascript)代码段,它对处理程序进行异步调用:
/* 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);
当我第一次加载webform
(包含此AJAX调用)时,它会将正确的查询字符串发送到处理程序(我在Visual Studio中使用debug检查它),如param = Street Joseph Blíss
。这是我希望它拥有的正确行为。
当我再次加载webform
(以及随后的所有时间)时,“Blíss”中的í
个字符在服务器端显示为Ã-
。因为这是我试图在服务器端数据库访问脚本上选择的实体的关键,它不起作用,因为它在第一次webform
加载时起作用。
我尝试在客户端上编码查询字符串并在服务器端上对其进行解码,使用如下内容:
客户端(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);
...但我没有运气,问题仍然存在。有什么帮助吗?
答案 0 :(得分:2)
经过一些搜索后,我发现如何解决服务器端代码细化问题。这是交易:
我必须改变我的.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));
快乐的编码,伙计们! :)