Java开发中的乱码实在是一件让人头疼的事,想起大学那会,时常被乱码所困惑,让人揪心,在网上搜来搜去,却找不到解决的办法,只因为自己没有深入去思考为什么会产生乱码,问题的实质根源处在那里,知识的匮乏让人蛋疼,大学那会确实也浪费了不少光阴呀,不瞎扯了...
一、我们需要知道为什么会产生乱码?
其实这个问题很简单,编码格式不统一,因为世界上有很多种编码的,目前的编码格式很多,例如 GB2312、GBK、UTF-8、ISO-8859-1等等。具体编码都不多做解释了,只需要明白为什么会产生乱码就OK了。
二、网络传输乱码如何解决?
注意:java在网络上传输用的是iso-8859-1 编码和解码
两种解决办法:1.重新转码
例:String username = request.getParameter("username");
userName = new String(username.getBytes("ISO-8859-1"),“gbk”);
当然我们可以写一个工具类,这样显得更专业一点
public static String getNewString(String input){
String result = “”;try{
result = new String(input.getBytes("ISO-8859-1"),“gbk”);
}catch(Exception e){
//可以打印异常
}return result;
}
2.使用过滤器
这个篇幅很长的,可以看专门使用过滤器解决的一些文章,上边解决不了再采用使用过滤器。
三、数据库乱码如何解决?
说明:其实数据库乱码还是因为编码方式不一样导致的,我曾遇到过 MyEclipse + mysql 数据库乱码,原因:数据库编码不对
先查看你eclipse中的编码方式,默认的是gbk,那我们就以这个为例,保证数据库也全部才有的gbk编码才不会乱码
修改mysql的时候也修改为gbk
步骤如下:
1.打开mysql的配置文件 my.ini具体目录自己可以去安装目录下找,我的目录在: C:\Program Files\MySQL\MySQL Server 6.0
修改[client]和[mysql]节点下的数据如下,如果没有则添加,有则修改default-character-set=gbk。(两处都要修改,就在这个文件里边)
2.单独某个数据库的编码修改
单独设置某个数据库:
alter database student character set gbk;//student为数据库表名
命令行修改某个编码:SET character_set_server = gbk;
查看编码格式的语句:查看编码格式:show variables like 'character%';
3.通过查看编码格式来查看编码格式是否修改成了gbk
注意,链接的时候加上编码格式 ?useUnicode=true&characterEncoding=gbk
注意:最重要是在数据库后边加上userUnicode=true&characEncoding=gbk
private static final String DBDRIVER = "com.mysql.jdbc.Driver";
private static final String DBURL = "jdbc:mysql://localhost:3306/SHR?useUnicode=true&characterEncoding=gbk";
private static final String DBNAME = "root";
private static final String DBPWD = "1234";