您的位置:首页 > 其它

UTF-8异步请求到gbk应用的处理方法2

2011-11-15 19:02 561 查看
前端js发送经过编码的http请求到gbk的后台应用,这时候需要进行编码解码的处理。



127.0.0.1:8080/xxx.xhtml?keywords=%E8%87%AA%E8%A1%8C%E8%BD%A6&encode=utf-8

当web应用收到这样的请求时,如果应用或者服务器上默认做了gbk编码的拦截处理,那么这时候用request.getParameter时将会出现乱码,解码后的中文字符最后一个字无法解码。

解决方法:用request.getQueryString()方式,获得queryString后自己重新解析这个url参数,代码如下

HttpServletRequest request ....;
String encode = StringUtil.trimToNull(request.getParameter("encode"));
//如果是utf-8编码
if (StringUtil.isEqualsIgnoreCase(encode, "utf-8")) {

//记录原始参数
if (request != null) {

Enumeration parameterNames = request.getParameterNames();
if(parameterNames!=null){
while (parameterNames.hasMoreElements()) {
String parameterName = parameterNames.nextElement().toString();
String parameterValue = StringUtil.trimToNull(request.getParameter(parameterName));

if(parameterValue!=null){
//parameterValue = URLDecoder.decode(parameterValue, "UTF-8");
try {
//对参数进行特殊处理
String queryString = request.getQueryString();
String[] querys = StringUtil.split(queryString, "&");
if(querys!=null && querys.length > 0){
for(String query : querys){
parameterValue = StringUtil.substring(query, StringUtil.getLength(parameterName+"="));
parameterValue = URLDecoder.decode(parameterValue, encode);//根据encode参数值自定义解码
}
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
}
}
//对于没有传值的参数,直接忽略应该没有什么副作用
if (!StringUtil.isEmpty(parameterValue)) {
request.setAttribute(parameterName, parameterValue);
}
}
}
}else {
//错误异常处理
return false;
}

}

return true;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐