Java Web项目中文乱码以及解决办法

一、中文乱码说明

 在Java Web项目中,由于pageEncoding、contentType和charset等编码属性的设置不恰当往往导致显示中文字符会出现乱码问题。例如,在Java Web项目的代码采用UTF-8进行编码,而在浏览器使用ISO-8859-1进行编码,因此会产生中文乱码问题。


二、相关知识

  1.JSP中pageEncoding、contentType以及contentType的charset的理解与区别:

1)pageEncoing:设置JSP源文件本身和响应正文中的字符集编码;

2)contentType:设置JSP原文建和响应正文中的字符集编码以及MIME类型;

3)charset:设置服务器发送给客服端时的内容的字符集编码。

  2.在Java Web项目中,通常情况下,产生中文乱码有三种情况:

第一种情况:调用JSP页面时产生中文乱码;

第二种情况:调用Servlet页面时产生中文乱码;

第三种情况:通过post请求传递包含中文字符的表单时出现中文乱码。

  3.几种常见的编码格式:

1)ISO-8859-1:属于单字节编码,最多能表示字符范围为0-255,应用于英文系列;

2)GB2312/GBK:是汉字的国标码,专门用来表示汉字,是双字节编码,而英文字母和ISO-8859-1一致。其中GBK编码能够用来同时表示繁体字和简体字,而GB2312只能表示简体字,GBK是兼容GB2312编码;

3)UTF-8:是一种用以解决国际上字符的多字节编码,它对英文使用一个字节,对中文使用三个字节进行编码,是国际上比较通用的字符编码。


三、产生中文乱码的三种不同情况的解决办法

1.调用JSP页面时产生中文乱码

解决方法:首先确认在保存JSP页面时使用的是UTF-8编码格式,然后在JSP页面的头部添加<%@page contentType="text/html"pageEncoding="UTF-8"%>或者将pageEncoding中的值改为UTF-8。

相关实验如下:

(1)新建一个名为Mess_code的JavaWeb项目;

(2)新建一个jsp_mess.jsp文件,源代码如下:

<%@page contentType="text/html" pageEncoding="ISO-8859-1"%>


    
        
        JSP中的中文乱码问题
    
    

看看这里有没有中文乱码问题

运行显示结果如下: 

                                 Java Web项目中文乱码以及解决办法_第1张图片


(3)将<%@page contentType="text/html" pageEncoding="ISO-8859-1"%>改为<%@page contentType="text/html" pageEncoding="UTF-8"%>重新运行结果如下:
                                           
                                             
2.调用Servlet页面时产生中文乱码
解决方法1:在Servlet使用response对象输出中文字符之前,先添加语句response.setContentType("text/html;charset=GB2312");目的是为了控制浏览器的行为,即是控制浏览器采用UTF-8进行解码。
解决方法2:在Servlet使用response对象输出中文字符之前,先添加语句
response.setCharacterEncoding("GB2312");目的是将response对象中的数据以GB2312格式解码后发向浏览器。这两种方法能使Servlet的编码与解码格式统一,解决中文乱码问题。
相关实验如下:

(1)新建一个名为Servlet_mess.java的Servlet,源代码如下:

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = {"/Servlet_mess"})
public class Servlet_mess extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        String data = "博客";  
        out.println(data); 
    }
}
运行显示结果如下:
                                                                                   (2)在doPost方法的PrintWriter out = response.getWriter();语句前面添加response.setCharacterEncoding("GB2312");的语句
再次运行,结果如下:
 


3.通过post请求传递包含中文字符的表单时出现中文乱码
解决方法:在Servlet或者JSP接收post提交的中文字符参数之前,使用request.setCharacterEncoding("UTF-8")设置接收参数的内容格式为UTF-8编码。
(1)新建一个post_mess.jsp的文件,源代码如下:
<%@ page language="java" pageEncoding="utf-8"%>


输入表单


姓名:
爱好:
(2)新建一个名为show.java的Servlet,源代码如下:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = {"/show"})
public class show extends HttpServlet {
   @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setCharacterEncoding("GB2312");
        String name = request.getParameter("name");
        String hobby = request.getParameter("hobby");
        PrintWriter out = response.getWriter();
        out.println("");
        out.println("显示考生考试信息");
        out.println("");
        out.println("

你的信息:

"); out.println("姓名:"+name+"
"); out.println("爱好:"+hobby+"
"); out.println(""); } }
(3)运行post_mess.jsp,并用输入中文字符填写表单,点击“提交”
填写表单页面如下:
Java Web项目中文乱码以及解决办法_第2张图片
提交结果如下:
                                                  Java Web项目中文乱码以及解决办法_第3张图片

(4)在doPost方法的response.setCharacterEncoding("GB2312");语句前面添加request.setCharacterEncoding("UTF-8");的语句,结果如下:

Java Web项目中文乱码以及解决办法_第4张图片


以上就是在Java Web项目中出现中文乱码的一些常见情况以及解决办法,希望能对大家有所帮助!






















你可能感兴趣的:(Java,Web)