六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 25|回复: 0

GBK环境下Ajax提交参数的问题

[复制链接]

升级  6.67%

12

主题

12

主题

12

主题

秀才

Rank: 2

积分
60
 楼主| 发表于 2013-1-23 02:49:42 | 显示全部楼层 |阅读模式
众所周知,Ajax默认是使用UTF-8编码来传递参数的。
如前端界面、配置文件、数据库等一概都用UTF-8编码,那毫无疑问是不存在编码问题的。
可是目前项目已经使用了GBK编码,如何在GBK环境下解决UTF-8编码问题呢?
以Ext的Ajax方法为例:
下面这个方法目的是删除Grid的一行或多行数据,这里构造了一个idParams,用于保存要删除的id列表。
var rec = Ext.MessageBox.show({title : '询问',animEl : 'btnDeleteRows',msg : '确认删除以上' + selectedRows.length + '条记录吗?',buttons : Ext.MessageBox.YESNO,icon : Ext.MessageBox.QUESTION,fn : function(btn) {var idParams = [];if (btn == 'yes') {for (var i = 0; i < selectedRows.length; i++) {var record = grid.getStore().getById(selectedRows[i].id);idParams.push(record.get('ID'));}Ext.Ajax.request({scope : this,url : urlDelete,params : {'idParams' : idParams},success : function(response) {var result = Ext.decode(response.responseText);if (result.success) {for (var i = 0; i < selectedRows.length; i++) {ds.remove(selectedRows[i]);}} elseExt.MessageBox.alert('错误', result.error);}});}}});

提交到后台,得到的数据不是所期望的诸如“10245,10445,10767,11345”等格式的数据,而是“10245%2C10445%2C10767%2C11345”,也就是说被被转换成UTF-8编码了。如果是中文参数,那就必须得解码了。
使用原始的new String(str.getBytes("UTF-8"),"GBK")已经不好用了,不过在java.net.URLDecoder里面提供了一个方法:
String idParams = URLDecoder.decode(request.getParameter("idParams"),"utf-8");
这样就OK了
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表