您的位置:首页 > 数据库

jsp数据库中文乱码处理

2017-05-27 00:08 483 查看
从服务器中JSP文件到浏览器显示页面的步骤为:

服务器JSP------>>(<%@ page   pageEncoding="GBK"%>告诉服务器JSP文件本身编码)服务器Servlet

------>>(<%@ page contentType="text/html; charset=GBK" %>告诉out输出流,输出内容的类型是html,并且内容编码是GBK)服务器HTML文件

------>>(<meta http-equiv="Content-Type" content="text/html; charset=GBK">告诉浏览器,接受到的这个文件是html类型的,并且文件内容的编码是GBK)浏览器HTML文件

------>>浏览器解析并显示接收的文件

二、JSP中存在数据库操作的情况下编码问题

                   JSP编译为Servlet后,数据库操作是在执行Servlet时进行的。

                           执行insert语句时,Servlet(就是一个.java文件)中的中文会插入到数据库中,首先要设置好本身java页面的编码为GBK,在eclipse中这样设置:

                          Window--Preference...--General--Workspace 下设置默认的encoding为GBK。这样就相当于声明了在数据库命令行中输入的中文为GBK编码的。其次保证被操                             作的database和table的编码都为GBK,这样做:在新建一个database后,设置这个database的编码为GBK,即执行这条语句----

                          alter database 数据库名 default character set 'GBK' ; 

                          在创建table的时候声明----charset='GBK';

                          经过这两步后就能保证插入到数据库表中的中文不出现乱码了。

                          执行select语句时,既然数据库表中没有中文乱码,那么在Servlet中执行select语句从表中拿出来的中文也就不会有乱码,从而,从out输出流一直到浏览器中

                          显示也就不会出现中文乱码。

最后总结:

           当JSP出现中文乱码时,按一下步骤检查:

            1、检查JSP文件的“三处”

                  <%@ page language="java" contentType="text/html; charset=GBK"  pageEncoding="GBK"%>

                  <meta http-equiv="Content-Type" content="text/html; charset=GBK">

             2、检查database的默认字符集是否为GBK: show variables like '%char%' ;

             3、检查table的默认字符集是否为GBK: show   table   status   from   数据库名   like   '%表名%' ;

             4、检查表中字段(column)的默认字符集是否为GBK:show   full   columns   from   表名;

             5、在以上三步中,如果出现字符集不为GBK,则应删除(先备份),再重新创建并设置默认字符集GBK;(我是直接在navicat软件修改字符集属性de)
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk" import = "java.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>Insert title here</title>
</head>
<body>

<%!ResultSet rs = null; %>
<p align = "center" >登记宠物信息</p>
<table width="700" border="1" align="center" bordercolor="#000000" bgcolor="#CCCCCC">
<tr>

<th scope="col">Animal ID</th>
<th scope="col">Animal 类型</th>
<th scope="col">Animal 名字</th>
<th scope="col">Animal 主人</th>
<th scope="col">Animal 生日</th>
<th scope="col">Animal 描述信息</th>
</tr>
<%
Connection conn = null;
Statement stmt = null;
String url  = "jdbc:mysql://localhost:3306/animalInfo";
String user = "root";
String passw = "123456";
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, passw);
stmt = conn.createStatement();
rs= stmt.executeQuery("select * from animalInfo");

while(rs.next()){
%>
<tr bgcolor="#DDDDDD">
<td bgcolor="#DDDDDD">
<div align="center"><%=rs.getString("ID")%></div>
</td>
<td bgcolor="#DDDDDD">
<div align="center"><%=rs.getString("Ani_Type")%></div>
</td>
<td bgcolor="#DDDDDD">
<div align="center"><%=rs.getString("Ani_Name")%></div>
</td>
<td bgcolor="#DDDDDD">
<div align="center"><%=rs.getString("Ani_Owner")%></div>
</td>
<td bgcolor="#DDDDDD">
<div align="center"><%=rs.getString("Ani_Birthday")%></div>
</td>
<td bgcolor="#DDDDDD">
<div align="center"><%=rs.getString("Ani_Description")%></div>
</td>
</tr>
<%
}
rs.close();
stmt.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
%>
</table>
</body>
</html>


数据库的表:

运行结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: