您的位置:首页 > 其它

关于使用ICallbackEventHandler接口 ,传递中文时的错误

2009-12-31 18:42 351 查看
初次使用ICallbackEventHandler接口实现Ajax就遇到中文编码的问题,郁闷了一下午,终于看到了一篇文章,赶紧分享出来

今天上线了一个项目,上线之后发现用户线上报名提交报名信息的时候居然报错,之前在测试服务器上运行正常。更奇怪的是只有IE和Chrome报错FireFox居然运行正常,于是在后台文件中加入跟踪日志文件跟踪用户提交的信息,发现IE提交的用户数据传到服务器端全部都是乱码。这种情况很可能是编码的问题,项目的web.config配置了<globalization requestEncoding="gb2312" responseEncoding="gb2312" />页面上其他很多的地方都是gb2312的编码,不想讲编码改为utf-8,在本地试验着将js提交给后台的参数用escape编码后再调用回传接口,然后在后台代码中将提交过来的参数用Server.UrlDecode("test")进行解码,本地运行正常,更新正式服务器的系统之后运行也正常。
  下面贴出部分代码,以下是没有修改之前的代码:
  前台提交数据的JS代码:

代码

public void RaiseCallbackEvent(string eventArgument)
{
m_strArguments = eventArgument;

if (string.IsNullOrEmpty(m_strArguments))
{
m_strReturn = string.Format("{0}|{1}", -1, "参数错误");
return;
}
string[] strArguments = m_strArguments.Split('|');
if (strArguments.Length != 4)
{
m_strReturn = string.Format("{0}|{1}", -1, "参数错误");
return;
}

m_strProv = Server.UrlDecode(strArguments[0]);//省份
m_strCity = Server.UrlDecode(strArguments[1]);//城市
m_strInternetbar = Server.UrlDecode(strArguments[2]);//网吧
m_strRegion = Server.UrlDecode(strArguments[3]);//大区

//验证数据的合法性

//提交数据到DB中
}

编译DLL之后更新系统dll并且更新页面,运行程序提交报名数据成功。问题是解决了,但是还是有两个问题让我疑惑:
1.为什么在测试服务器上运行正常?
2.为什么只有IE和Chrome运行错误提交到服务器端得中文会乱码而FireFix确实正常的?
这两个问题还有待研究,同时希望高手提点一二。
看来以后得养成一个习惯,在涉及到url传参和回传传递参数时一定要将参数编码滞后在传递。
详细出处参考:http://www.pqshow.com/program/aspnet/200909/9619.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐