`

Ajax通过POST方法发送中文信息乱码解决

阅读更多

开发项目用Ajax的Post方法提交信息到请求的servlet,输出遇到中文乱码,纠结了好几天,总结了网络上很多高手的心得,用了两步解决了乱码:

  1. 在JS端,对提交的字符串进行两次编码:
    <%@page contentType="text/html" pageEncoding="gbk"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=gbk">
            <title>JSP Page</title>
    
            <script type="text/javascript">
                var req;
                function validate() {
                    //获取表单提交的内容
                    var idField = document.getElementById("userName").value;
    				//要发送的字符串数据
                    var content = "id=hello&message=" + idField + "&say=我是帅哥";
                    
    				//重点:对content含中文字符的字符串进行两次编码
                    content = encodeURI(content);
                    content = encodeURI(content);
                    var url = "validate.do";
                    //创建一个XMLHttpRequest对象req
                    if(window.XMLHttpRequest) {
                        //IE7, Firefox, Opera支持
                        req = new XMLHttpRequest();
                    }else if(window.ActiveXObject) {
                        //IE5,IE6支持
                        req = new ActiveXObject("Microsoft.XMLHTTP");
                    }
    
                    req.open("post", url, true);
                    req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                    req.onreadystatechange = callback;
                    //send函数发送请求,参数
                    req.send(content);
                }
    
                function callback() {
                    //alert(req.readyState);
                    //alert(req.status);
                    if(req.readyState == 4 && req.status == 200) {
                        //alert(req.status);
                        //alert(req.responseText);
                        var check = req.responseText;
                        show (check);
                    }
                }
    
                function show(str) {
                    document.getElementById("info").innerHTML = str;
                }
            </script>
        </head>
        <body>
            <h1>Test Ajax</h1><p>
            <form action="" method="get" name="form">
                <br>
                输入用户名:
                <input type="text" size="10" maxlength="8" id="userName" name="name" onblur="validate()">
                <span id="info"></span>
                <br>
                输入商品名:
                <input type="submit" name="refer" >
            </form>
        </body>
    </html>
     
  2. 在servlet端,对接收的数据的进行一次解码:
    package com.model;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.net.URLDecoder;
    
    /**
     *
     * @author Gavin
     */
    public class DoAjaxServlet extends HttpServlet {
       
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            response.setContentType("text/html;charset=gbk");
            request.setCharacterEncoding("gbk");
            PrintWriter out = response.getWriter();
            try {
                response.setHeader("Cache-Control", "no-store");
                response.setHeader("Pragma", "no-cache");
                response.setDateHeader("Expires", 0);
    			//这里有个小问题:如果写成String put = null;将会输出一个null后面再加上增加的字符
                String put = "";
                for(Enumeration<String> e = request.getParameterNames(); e.hasMoreElements(); ) {
                    String h = (String) e.nextElement();
                    String c = (String)request.getParameter(h);
                    put += c;
                    
                }
    			//重点在这里,对接受到的信息进行解码
                String putDecoded = java.net.URLDecoder.decode(put,"utf-8");
                System.out.println(pute);
                out.write("message is:" + putDecoded);
            } finally { 
                out.close();
            }
        } 
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        } 
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
    
        @Override
        public String getServletInfo() {
            return "Short description";
        }// </editor-fold>
    
    }
    
     
0
0
分享到:
评论

相关推荐

    AJAX在Post中文的时候解决乱码的方法

    用AJAX来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8的数据流的时候汉字会...

    ajax提交,后台中文乱码解决

    解决ajax异步提交后台取值中文乱码问题,提供两种解决方法

    JQuery的Ajax中Post方法传递中文出现乱码的解决方法

    主要介绍了JQuery的Ajax中Post方法传递中文出现乱码的解决方法,较为深入的分析了Ajax的post方法出现乱码的原因,以及具体的解决方法,需要的朋友可以参考下

    ajax中文乱码如何解决

    今天终于解决了AJAX的中文乱码问题,写篇文章来帮助一下有同样问题的朋友们。我的开发环境:XP, eclipse,使用GB18030编码。 当遇到这个问题时,到网上去查了好多文章,提到几种解决方案,如:全站UTF-8编码;请求头...

    c# ajax post数据乱码解决

    需要对webconfig修改,主要是要修改页面编码格式为utf-8

    Ajax使用POST提交中文乱码问题.docx

    Ajax使用POST提交中文乱码问题.docx

    AJAX在Post中文的时候乱码的解决方法

    AJAX在Post中文的时候乱码的解决方法

    ajax乱码解决汇总

    用AJAX 来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把 resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8的数据流的时候汉字...

    JQuery中Ajax的Post提交在IE下中文乱码的解决方法

    引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? 问题的引入: 代码如下: var regid = $(‘#oregion’).combobox(‘getValue’); //var sname = $(‘#sname’).val(); ...

    php+Ajax(GET&POST)完美实例

    php+Ajax解决了post与get中文乱码的问题 后台页面可以结合mysql使用,以达到相应目的

    ajax中使用javascript的send方法post参数

    ajax中使用javascript的send方法post参数。当用set方法是会出现中午乱码的问题,该文档说的post方法很好的解决了该问题,具体用法见文档

    jQuery调用AJAX时Get和post公用的乱码解决方法实例说明

    以前在新浪博客写过js调用AJAX时Get和post的乱码解决办法,但是使用js代码比较繁琐,我们在使用ajax进行数据交互时可以使用js的一个成熟框架—jQuery。 一个网站的设计,不管是注册登录还是分页查找,都需要提交参数...

    js调用AJAX时Get和post的乱码解决方法

    在使用"get"时,抓取的页面最后加上编码类型,在使用post时用vbscript解决了编码问题,具体实现如下,有类似情况的朋友可以参考下哈

    ajax请求乱码的解决方法(中文乱码)

    今天遇到一个问题,有关ajax请求中传输中文,遇到乱码的问题。 如下代码: 代码如下:function UpdateFolderInfoByCustId(folderId, folderName, custId) { $.ajax({ type: “Post”, contentType: “application/...

    Ajax传递中文参数到后台乱码的有效解决方法

    使用Ajax传递中文参数,如果不对参数进行处理的话,传到后台会变成乱码,经测试可以使用如下方法 这里是以jquery.autocomplete插件中获取输入框中的数据传到后台为例: 注意要对中文使用encodeURI编码两次 代码如下:...

    AJAX中文乱码问题探讨及解决

    AJAX中文问题分为两大类: 1)发送路径中的参数有中文,在服务器段接收参数值是乱码 例如: var url=”a.jsp?name=小李”; xmlHTTP.open (“post”,url,true); 解决办法: 利用javascript的提供的escape()或...

    ajax XMLHTTP Post Form时的表单乱码综合解决

    用XMLHTTP Post Form时的表单乱码有两方面的原因——Post表单数据时中文乱码;服务器Response被XMLHTTP不正确编码引起的乱码。换句话说,本文主要解决两个问题——怎样正确Post中文内容&怎样正确显示得到的中文内容...

Global site tag (gtag.js) - Google Analytics