Java Web开jsp显示中文乱码处理

Java Web中文乱码解决方案

  • 中文乱码分类

  • Jsp页面中编辑的中文乱码

  • Jsp页面接收请求中文乱码

    1. 表单方式get

    2. 表单方式get

    3. post方式

  • Jsp页面显示数据库信息的中文乱码

jsp页面上获取的数据库的字符串的编码是以数据库服务器为基准的,例如:MySQL数据库设定的字符集为UTF-8,在jsp页面中查询得到的字符串编码方式为UTF-8,当浏览器显示该字符串信息时,会根据jsp页面设置的pageEncoding进行解码,如果你的pageEncoding设置不是UTF-8,那么很可能就是乱码。

解决方法:

对该字符串使用数据库的字符编码类型进行解码,并使用jsp页面的pageEncoding编码进行编码。

例如:数据库编码为GB2312,jsp的pageEncoding为UTF-8。页面上得到数据库中用户表的用户名userName字段的值,转码方式如下:

<%
    String userName = rs.getString("userName");
    userName = new String(userName .getBytes("GB2312"), "UTF-8");
    out.print(userName);
%>

  • 总结:

  • Java Web开发中Jsp显示中文乱码的主要原因是编码不统一导致的,统一编码是个好的思路。当今的浏览器都能自动识别Jsp页面的编码,如UTF-8和GB2312,我们只需要将Jsp页面的编码统一设置为UTF-8或者GB2312即可,因为UTF-8使用3个字节编码,能支持更多的国家的字符,我们在开发中约定使用UTF-8编码。


    设置统一编码

    首先:设置你的IDE(集成开发工具)的编码方式为UTF-8。

    开发大部分是MyEclipse或者是Eclipse for J2EE,现在以MyEclipse为例。设置方法:Windows->preferences->General->Workspace 设置Text file encoding 为UTF-8,如下图:

    Java Web开jsp显示中文乱码处理_第1张图片

    其次:设置你的Jsp页面的编码方式,在所有的Jsp页面的头部设置

             <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
             当然你也可以设置新建的Jsp文件的编码方式为UTF-8,方法:Windows->preferences->MyEclipse->Files and Editors->JSP,设置编码UTF-8。如下图:
    Java Web开jsp显示中文乱码处理_第2张图片
    现在说说设置的编码的具体意义
    其中:pageEncoding指的是jsp文件本身在本地保存时的编码方式。
              contentType的charset是指服务器发送网页内容给客户端时所使用的编码。
            
    设置到这里,可以保证你在JSP中编辑的中文能正常显示了。


    接着:设置你的tomcat服务器的默认编码,在没有设置的情况下,tomcat服务器的默认编码是ISO-8859-1,现在设置为UTF-8。


             表单方式get方式提交请求:

    当我们使用表单方式get方式提交请求时,浏览器会根据JSP页面的设置的charset进行编码,tomcat对这些信息进行解码时,采用的解码方式是由server.xml文  件中的URIEncoding设置决定的,也就是说,当我们使用命令request.getParameter("")获取表单参数值时,得到的字符串,经过了charset的编码和URIEncoding的解码,如果在接收数据的时候不使用ISO-8859-1进行解码的话,Jsp页面会按页面设置的编码进行解码,显然会出现中文乱码“????”等。修改tomcat服务器的默认编码为UTF-8后我们就不用对其进行解码,中文也能正常显示。
    修改方法:找到tomcat的安装目录,在conf文件夹中找到server.xml并编辑,在connector标签中添加 URIEncoding="UTF-8" useBodyEncodingForURI="true",修改后的结果为  

                  
    

    设置到这里,可以保证表单的get提交时不会出现中文乱码


             url方式get

    对于这种方式,浏览器不会采用页面的charset方式对URL中的中文进行编码后提交至服务器(IE,FireFox都一样),而是采用系统的GBK转码为ISO-8859-1之后提交至服务器tomcat,所以这个过程为:
    首先,url地址中的中文被从gbk转换成ISO-8859-1,交给tomcat后,又被tomcat根据URLEcoding解码,这种情况,只有把URLEcoding设置为gbk才能在request.getParameter("")时不出现乱码。但是这样就会影响到上面的配置,所以一个好的解决方法是,使用java.net.URLEcoder和URLDecoder对地址中的中文进行手动编码和解码。下面是一个实例:

    请求页面
    <%String username = "张某某"%> ">转入 
    接收页面
    <%=URLDecoder.decode(request.getParameter("param"),"utf-8")%>

    设置到这里,你不会再怕jsp中文乱码了

你可能感兴趣的:(JSP)