JSP页面表单提交时出现中文乱码的解决方法

       使用JSP写了一个用户登录的页面login.jsp,然后使用signin.jsp来处理login.jsp表单发送过来的数据,在login.jsp中发送过来的用户名是中文,login.jsp页面和singin.jsp页面都声明了页面的编码方式为UTF-8--pageEncoding="UTF-8"。并且在singin.jsp的逻辑处理页面中设置浏览器发送过来的编码以UTF-8的方式解码,在singin.jsp中使用request.getParameter("username")的方式获得表单提交时的用户名,然后在页面中使用System.out.println(username);来输出提交的用户名,这时出现中文乱码。

以中文的方式提交表单:


在控制台输出出现中文乱码:


login.jsp页面代码:

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="UTF-8">
        <link type="text/css" rel="stylesheet" href="css/bootstrap.min.css">
        <title>login</title>
    </head>
    <body>
                  <div class="container">
                        <form action="signin.jsp" method="get">
                                <legend>登录:</legend>
                                <label for="username">账号:</label>
                                <input type="text" name="username" id="username"/>
                                <label for="password">密码:</label>
                                <input type="password" name="password" id="password"/>
                                <div>
                                        <button class="btn btn-success" type="submit">登录</button>
                                        <a class="btn btn-info" href="reg.jsp">注册</a>
                                </div>
                       </form>
                 </div>
    </body>
</html>


signin.jsp页面程序代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
        /*浏览器提交的数据在提交给服务器之前设置编码方式为UTF-8*/
        request.setCharacterEncoding("UTF-8");
        /*从login.jsp表单中获取表单元素的值*/
        String username = request.getParameter("username");
			
        System.out.println("username" + username);
%>

这时在控制台输出的username是一系列的问号(乱码), 之所以出现这种问题是 Tomcat 中对于 post 方法提交表单时 ,默认采用的编码方式是ISO-8859-1,因此在我们获得了username这个字符串的时候还得将ISO-8859-1编码的字符串转换为UTF-8的字符串。在JavaSE中的String类有一个构造方法可以讲指定的byte数组转换(解码)成指定字符编码的字符串形式。


因此我们首先需要获得username的字符换表示,由于username本身就是一个String类型的字符串,因此我们可以调用String类的一个方法getBytes();


来获得username的byte数组表示。在getBytes()的时候我们还要指定字符的编码方式,指我们要以什么字符编码的方式来将username转换成byte数组。由于浏览器在post提交的时候采用的是ISO-8859-1的方式进行提交,因此我们就需要将username的getBytes()的编码方式设置为ISO-8859-1.。依然使用前面的代码,只不过对代码进行细小的修改。就可以表单提交中文出现的乱码问题。


细小修改后的signin.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
        /*浏览器提交的数据在提交给服务器之前设置编码方式为UTF-8*/
        request.setCharacterEncoding("UTF-8");
        /*从login.jsp表单中获取表单元素的值*/
        String username = request.getParameter("username");
        /*将浏览器post提交过来的ISO-8859-1的编码方式转换成UTF-8的方式*/
        String name = new String(username.getBytes("ISO-8859-1"),"UTF-8");	
        /*输出用户名*/		
        System.out.println("username" + name);
%>


这是提交表单的时候就可以正常出现提交的中文字符了。









  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值