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

以中文的方式提交表单:

JSP页面表单提交时出现中文乱码的解决方法_第1张图片

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


login.jsp页面代码:

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>


    
        
        
        login
    
    
                  
登录:
注册


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

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









你可能感兴趣的:(JavaEE)