A-A+

ajax提交中文乱码问题 简单解决之道

2009年07月02日 未分类 暂无评论 阅读 1 次

最繁琐的办法末过于结合 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);
    }

给我留言

Copyright © 浩然东方 保留所有权利.   Theme  Ality 07032740

用户登录