ASP.NET& Ajax:使用ISO-8859-1编码查询字符串参数

时间:2009-10-16 14:29:04

标签: 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.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);

...但我没有运气,问题仍然存在。有什么帮助吗?

1 个答案:

答案 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));

快乐的编码,伙计们! :)