javaWeb常见编码错误问题的总结.

以下所有解决方案假设使用的国际通用万国码UTF-8

 

首先最多人遇到的数据库乱码问题:

如不能确定是否这种问题做好调试程序,写一个测试类,从web应用程序插入数据到数据库中,然后再读取出来显示到前台,看看是不是显示出来的没有乱码但是从数据库看就乱码了.多动手写写测试类找到错误原因比直接搜索效率快很多.

 

1.连接数据库时需指定web应用程序和数据库连接所使用的编码:

jdbc:mysql://localhost:3306/contest?useUnicode=true&characterEncoding=UTF-8

不写的系统默认系统编码或者也可能为项目缺省编码,造成编码不统一,也就是乱码

 

2.数据库查看使用的是MySQL Client,查看乱码:

如果查看数据库使用MySQLClient可能会因为安装数据库的时候选择的编码问题或者因为系统默认编码导致看数据的时候看到的是乱码.实际上存储的过程是正确的,只不过显示出来的时候用错误的编码显示了,这里推荐使用mysql -u用户名 -p密码的放在在cmd环境下进入查看数据库,会以数据库编码的方式来显示数据.

3.新建数据库和数据表的时候未指定编码

如果是用可视化工具建的数据表,那么一般会让用户指定编码类型,这样基本不会有编码不正确的问题,如果是自己手动建立的数据库,那么格式可以参考下面来指定编码方式:

 

创建数据库:

CREATE DATABASE `contest` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

创建数据表:

CREATE TABLE `contest`.`user`(

`uid` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ‘用户编号’,

`username` VARCHAR(20) NOT NULL COMMENT ‘用户名’,

`password` VARCHAR(32) NOT NULL COMMENT ‘用户密码,MD5加密’,

`type` ENUM(‘管理员’,’学校负责人’,’普通用户’) NOT NULL DEFAULT ‘普通用户’  COMMENT ‘用户类型’,

PRIMARY KEY (`uid`),

UNIQUE INDEX `UNIQUE` (`username`)

) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_unicode_ci

COMMENT=’用户账号表’;

 

 

其他 乱码方式主要是因为网页编码或者项目编码或者代码编码不符合

4.jsp和html页面代码编码问题:   

例如:

<%@ page contentType=”text/html;charset=UTF-8” language=”java” %>

<html>

<head>

<title>编码例程</title>

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8“>

<!–或者下面这种–>

<meta charset=”utf-8″/>

</head>

<body></body>

</html>

5.jsp中java代码或者servlet代码编码不规范

可以在所在拥有网页上下文的页面(jsp,servlet,filter等) 的代码之前加入下列两句话:

request.setCharacterEncoding(“UTF-8”);

response.setCharacterEncoding(“UTF-8”);

如果感觉麻烦了还有另一种方法,就是编写过滤器来实现编码的自动转换,注意:编码过滤器必须放在其他过滤器之前,这样才能保证其他过滤器(比如防sql注入,跨站脚本攻击,自动登录等功能)能够获取到正确的编码.

过滤器可参考:

http://blog.csdn.net/friendan/article/details/9090105

或者:

https://coding.net/u/yanweijia/p/contest/git/blob/master/src/filter/CharacterEncodingFilter.java

注意:在web.xml中要配置过滤器

6.项目编码不正确或者文件编码不正确

若使用的是Eclipse系列的IDE:

右键点击项目名称,选择Properties,将编码修改为UTF-8,如下:

若编码问题还存在,请查看文件编码是否有误:

右键单击文件,选择Properties,同样修改编码为UTF-8

若使用IDEA系列IDE:

最好在新建项目的时候将IDE的编码直接修改为UTF-8,修改方法如下:

打开菜单栏File->Setting,搜索coding,看到如下页面,修改成UTF-8即可

如果是已经建立好项目的,参考网上的方法修改编码,

以上所提及的内容都已经配置好,还是有编码问题的话请打开项目目录,找到代码文件,右键,用Notepad++或者有类似能够查看编码的工具查看文件编码是否已经修改正确,如:

再有其他问题不好修改的话还是建议新建项目,把原来代码(文本)一个个拷到新文件里面,直接规范化开发较好

 

注意!!!!!修改完成代码后一定要redeploy,重新编译项目,不然java代码可能未重新编译看不到效果

有其他问题直接在下方留言即可.

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注