jsp数据库中文乱码处理

来源:互联网 发布:wii 知乎 编辑:程序博客网 时间:2024/06/16 04:21

从服务器中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>

数据库的表:


运行结果:



原创粉丝点击