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

时间:2021-10-07 06:52:16

       使用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);来输出提交的用户名,这时出现中文乱码。

以中文的方式提交表单:

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

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

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

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数组转换(解码)成指定字符编码的字符串形式。

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

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

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

来获得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);%>

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

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