出现乱码的根本原因是字符集的不统一造成的,因此只要统一字符集即可。
最简单的办法,是把所有字符集全部换成统一的字符集。
MySQL的处理
首先查看表结构,如果表是字符集是latin的话,修改表字符集为UTF8即可。
alter table user convert to character set utf8;
如果表本身字符集都不是中文字符集,那么肯定是不能存中文的,所以至少是gbk、utf8这种。
修改数据库的字符集
alter database webhuzi character set utf8;
当然,还有一种暴力的方式,就是把MySQL中的my.ini中的UTF-8开启,MySQL内所有字符集手动设置为UTF-8,这样创建的数据库就是UTF-8了,这里就不阐述了,毕竟这种改动过于巨大,不适合项目开发,而且创建过的表还是需要修改表字符集的。
当然,在创建数据库和表字段的时候,就设置字符集为UTF-8等就避免了这些问题。
//GBK
create database test default character set gbk collate gbk_chinese_ci;
//UTF8
create database test default character set utf8 collate utf8_general_ci
//table
create table test (
`id` varchar(18) not null,
`password` varchar(18) not null,
) engine=InnoDB default charset=utf8;
JDBC数据库连接的处理
连接数据库的URL添加字符集选项
jdbc:mysql://localhost:3306/WebHuzi?useUnicode=true&characterEncoding=utf8
JSP页面的处理
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
Servlet中的设置
Servlet中doPost方法里的首部添加如下代码
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html; charset=UTF-8");
当然,我还是建议配置一个过滤器,这样一来省去了每次都要打Servlet这段代码。