jsp与mysql中的中文字符乱码问题

刚开始自学jsp,在练习的过程中遇到了一个很严重的问题,就是中文字符乱码的问题,我用了三天的时间,搜集资料,终于解决了这个问题,现在对学到的东西进行一下总结整理。

1.首先是jsp页面显示乱码的问题,<title></title>标签中有中文有英文,设置<meta charset="utf-8" > 显示乱码,改为gbk则可正常显示,其他页面使用utf-8则显示正常。最终发现是因为文件创建是用了不同的方法,一般情况下,用记事本编写代码,文件另存为*.html,保存类型选所有文件,编码选UTF-8,之后再讲文件后缀名改为.jsp,这样创建最为稳妥。

参考http://www.blogjava.net/luedipiaofeng/articles/307666.html     

在jsp文件头部应该这样写:

<%@ page language="java" pageEncoding="UTF-8"%>    jsp文件的存储格式
<%@ page contentType="text/html;charset=UTF-8"%>      解码格式,必须与存储格式保持一致,不然<body></body>中的“你好”就会显示乱码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">     控制浏览器的解码方式
</head>
<body>

你好

</body>
</html>

2.现我有两个文件,一个register.html和一个register.jsp,在register.html页面中输入注册信息,传递给register.jsp文件,该文件将接收到的数据写入到数据库中。出现英文写入正常,中文乱码的情况。若中文部分全为???,则说明中文字符未能写入数据库,若为无法辨认的字符乱码,证明中文写入了数据库只是编码有问题。

当出现中文部分全为???或使用insert语句都无法写入数据库时,我重新创建了数据库。

create database test DEFAULT CHARSET SET utf8 COLLATE utf8_general_ci;  (设置默认字符集,及数据库校验规则)

use test;

create table student(id int AUTO_INCREMENT primary key not null, name varchar(10) not null, password varchar(20) not null )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

show create table student;    显示创建表的信息

show variables like 'character_set_%';         查看数据库字符集

 

参考:http://www.2cto.com/database/201406/306012.html

我发现,在我将输入数据从html传入到jsp文件中时,就已经是乱码了,这个乱码是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,(tomcat默认编码:ISO8859-1)接受的jsp却以utf-8的方式接受。导致乱码。

有两种方法可以解决该问题
1>.接受参数时进行编码转换   String name = new String(request.getParameter("uname").getBytes("ISO-8859-1"),"utf-8");   针对单个参数转码

2>.在jsp接受参数的代码前加上  request.setCharacterEncoding("UTF-8");    针对所有参数转码

jsp接收到的参数终于可以正常显示了。

 

3.String url ="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd+"&useUnicode=true&characterEncoding=UTF-8";   指定字符的编码解码格式,若mysql数据库使用gbk编码,项目数据库使用的是utf-8编码,在存数据时,数据库会将项目数据用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。在从数据库中取数据时,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。

 

 

参考:http://blog.csdn.net/centre10/article/details/5903924

posted @ 2015-07-30 16:16  喵嘞个咪~  阅读(3461)  评论(0编辑  收藏  举报