javaWeb传递数据到服务器乱码

来源:互联网 发布:北京企业全网营销优化 编辑:程序博客网 时间:2024/06/07 06:09

1.jsp页面出现乱码

    1.1 编码格式为jsp文件的存储格式
         <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    1.2 编码要为你所需要的解码格式
        <%@ page contentType="text/html;charset=UTF-8"%>
    1.3 控制浏览器的解码方式
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

  2.数据库存储出现乱码

      前提是前端和服务器端编码格式没错的情况下。
     配置jdbc的url时:在jdbc:mysql://127.0.0.1/activit后添加?useUnicode=true&amp;characterEncoding=utf-8
     可防止数据库存储数据不会出现乱码。

  3.服务器端出现乱码

     3.1 前台传递数据到服务器端出现乱码

         form表单提交数据类别分为post和get,页面Get或者Post提交form表单数据时,会对表单中的中文进行编码,
           而编码方式是由服务器页面响应Header中的“Content-Type: text/html; charset=gb2312”确定的。
           不管是get或者post提交,会默认采用GB2312编码。
         当需要跳转页面时,post可以设置请求的编码格式: <%request.setCharacterEncoding("UTF-8"); %>  
            还有一种方法就是通过过滤器来设置编码格式,你需要在web.xml中配置过滤器,还要写一个编码过滤器的java类
           但是get需要将传递的参数给传换成utf-8,这里参数为username
           <%String str = new String(request.getParameter("username").getBytes("ISO-8859-1"),"utf-8"); %>  
           Username:<%=str %>  

     3.2 服务器端传递数据到前端出现乱码

          回显数据时,你要将数据的格式给确定,还要设置响应数据的编码格式:

                  response.setContentType("application/json;charset=utf-8");

   4. JQuery中的AJax提交


        1)POST请求:参数放到data中,无需对参数值编码,JQuery在构造HTTP请求时,会调用js的函数encodeURIComponent()对data中的键值对分别进行utf-8编码,
                 服务器用utf-8解码。url中对应的就是url地址,不能含有参数。即使服务器Globalization结点配置的GB2312解码,
                  Request.Form["xxx"]也会用utf-8解码,因为AJax的post请求中在HTTP头添加了代码“Content-Type: text/html; charset=utf8”,
                  告诉服务器用utf-8解码,达到编码和解码一致的目的。这点可能和我们平时想的不一样,整站配置为GB2312编码的站点,竟然AJax的post请求都是用的utf-8编码!
        2)GET请求:参数放在Url中,并按照和服务器一致的编码方式编码,如服务器配置的Globalization结点为UTF-8,则将参数值用UTF-8编码,可以调用函数    encodeURIComponent();
                    如果服务器配置为GB2312,则将参数用GB2312编码,可以调用escape()。Get和Post请求的一大差别是,GET请求不会改变请求的Header,
                    Request.QueyString["xxx"]解码用的是Globalization指定的编码。
0 0
原创粉丝点击