美国上市公司,专注Java培训21年

如何解决网页传值过程中文乱码问题


解决中文乱码问题
网页传值主要有两种情况:
1、使用form表单传值
    使用form表单传值主要有两种方式:get和post(即:method="get/post",默认是get方式)
    1)解决使用post方式传递中文的乱码问题:
        方法一:
        <form action="login-handler.jsp" method="post"></form>
        在接收请求参数之前设置请求编码即可,request.setCharacterEncoding("编码");
        示例:
        <%
            request.setCharacterEncoding("UTF-8");
            String name = request.getParameter("name");
            String pwd = request.getParameter("pwd");
        %>
        方法二:
        可以写一个Filter过滤该项目下的所有请求编码
        web.xml文件
        <filter>
          <filter-name>charsetEncoding</filter-name>
          <filter-class>com.lym.filter.CharsetEncodingFilter</filter-class>
          <init-param>
              <param-name>code</param-name>
              <param-value>UTF-8</param-value>
          </init-param>
       </filter>
       <filter-mapping>
          <filter-name>charsetEncoding</filter-name>
          <url-pattern>/*</url-pattern>
       </filter-mapping>
       CharsetEncodingFilter.java文件
       public class CharsetEncodingFilter implements Filter {
          private static String CODE = "UTF-8";//默认编码
          public void destroy() {}
          public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {
              HttpServletRequest req = (HttpServletRequest)arg0;
              HttpServletResponse resp = (HttpServletResponse)arg1;
              req.setCharacterEncoding(CODE);
              resp.setCharacterEncoding(CODE);
              arg2.doFilter(arg0, arg1);
         }
         public void init(FilterConfig arg0) throws ServletException {
             String code = arg0.getInitParameter("code");
             if(!"".equals(code) && code!= null){
                 CODE = code;
             }
        }
     }     
    2)解决使用get方式传递中文的乱码问题:(两种方法)
        <form action="login-handler.jsp" method="get"></form>
        方法一:
            对接受到的请求参数进行转码,使用String name = new String(name.getBytes("默认编码"),"转换后的编码");
            <%
                String name = request.getParameter("name");
                name = new String(name.getBytes("ISO-8859-1"),"UTF-8");//将接收到的name参数的编码转换为UTF-8编码
            %>
        方法二:
            客户端用户提交数据之前,使用JS把用户要提交的中文值进行编码,然后再服务器端对接收到的值进行解码即可。
            客户端编码:
                <script>
                    function login(){
                        var loginForm = document.forms["loginForm"];
                        loginForm.name.value = encodeURI(loginForm.name.value);//对中文字符串进行编码
                        return true;
                    }
                </script>
                <form action="login-handler.jsp" name="loginForm" method="get"></form>
            服务端解码:
                <%
                    String name = request.getParameter("name");
                    name = URLDecoder.decode(name, "UTF-8");
                %>
                 
        注意:使用encodeURI对字符串进行一次编码,再提交表单时又对字符串进行了一次的编码,实际进行了两次编码。
               在使用URLDecoder.decode()进行解码时,实际上是对字符串进行两次解码。
            
2、使用<a href=""></a>超链接的方式传值
    使用JS对a标签的href属性值进行编码,在对a标签的href属性值编码时,要两次编码才能在服务端使用URLDecoder.decode()进行解码。
    客户端编码:
        <script>
            function a(){
                var doc = document.getElementById("aa");
                doc.href = "a-handler.jsp?info="+encodeURI(encodeURI("你好"));
            }
        </script>
        <a href="" id="aa">使用超链接传送中文参数</a>
    服务端解码:
        <%
            String user = request.getParameter("info");
            user = URLDecoder.decode(user, "UTF-8");
            out.println(user);
        %>

【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!

Java开发高端课程免费试学

大咖讲师+项目实战全面提升你的职场竞争力

  • 海量实战教程
  • 1V1答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多
  • 如何应用 if 语句判断某一年是否为闰年?
    如何应用 if 语句判断某一年是否为闰年?
    地球绕太阳一圈称之为一年,所用时间是 365 天 5 小时 48 分 46 秒,取 365 天为一年,4 年将多出 23 小时 15 分 6 秒,将近一天,所以 4 年设一闰日(2 月 29 日),该年称为闰年。如何应用 if 语句判断某一年是否为闰年? 详情>>

    2015-10-22

  • 能正确编译“short s = 1;s = s + 1;”吗?
    能正确编译“short s = 1;s = s + 1;”吗?
    在进行程序设计时,经常需要进行一些算术运算,有的运算能够通过编译器编译,而有的运算则不能通过编译器编译。那么能正确编译“short s = 1;s = s +1;“吗? 详情>>

    2015-10-22

  • java语言中如何修改失败的 if…else 语句?
    java语言中如何修改失败的 if…else 语句?
    判断下列程序代码的运行结果,如何修改代码中的条件判断才能正确执行 if…else语句。 详情>>

    2015-10-22

  • java语言中可以用 switch 分支语句代替 if 条件语句吗?
    java语言中可以用 switch 分支语句代替 if 条件语句吗?
    通常情况下,switch 语句比一系列嵌套的 if 语句更有效,那么是否可以用 switch 分支语句代替 if 条件语句呢? 详情>>

    2015-10-22

  • Java开班时间

    收起