javaWeb中解决中文乱码问题

javaWeb中解决中文乱码问题。
网页传值主要有两种情况:

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");
        %>
    

    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" οnsubmit="login()" method="get"></form>
            服务端解码:
                <%
                    String name = request.getParameter("name");
                    name = URLDecoder.decode(name, "UTF-8");
                %>
                
        注意:使用encodeURI对字符串进行一次编码,再提交表单时又对字符串进行了一次的编码,实际进行了两次编码。在使用URLDecoder.decode()进行解码时,实际上是对字符串进行两次解码。
            

2、使用<a href=""></a>超链接的方式传值

    在对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" οnclick="a()">使用超链接传送中文参数</a>
    服务端解码:
        <%
            String user = request.getParameter("info");
            user = URLDecoder.decode(user, "UTF-8");
            out.println(user);
        %>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值