ajax提交中文乱码问题 简单解决之道
最繁琐的办法末过于结合 getByte,new String (...,'编码格式') 最终转化为所需要的中文字符;
下面介绍一个不需要如此烦琐的方法来实现
-------------------------------------------------------------------
ajax默认中文提交以utf-8格式,所以只需要在你的web服务加个过滤器,设置下编码格式即可;
1.注意为防止编码设置无效,请在编码设置完后,显示调用下request.getParameter("");(tomcat5.0测试通过)
据说其他服务器,可能显示调用了,也有可能被服务器重置;
2.有时已经有filter需要设置gbk编码,为了不影响原先的filter功能,我是直接在ajax提交时候,带个服务端要设置的编码格式 例如 Ajax.request("/myaction.do?charset=utf-8")
服务端filter,要用request.getQueryString() 截取charset值 ,注意千万不要用request.getParameter("charset");
3.注意,在没设置编码格式前,不要加 watch监控 比如有个表达式 request.getParameter("*");
核心代码如下:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException,
ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
try {
String queryString = httpRequest.getQueryString();
//获取浏览器提交的charset
String charset = (String)HttpUtil.getParams(queryString).get("charset");
if(charset!=null){
httpRequest.setCharacterEncoding(charset);
}
else{
httpRequest.setCharacterEncoding("gbk");
}
//使编码生效,在这之前不要调用request.getParameter
request.getParameter("");
} catch (UnsupportedEncodingException e) {
}
// move on to the next
chain.doFilter(request, response);
}