最近自己搭建了一套SSM框架,但是中途遇到了各种各样的问题,Tomcat起服务报错,界面不能跳转,最让人头疼的是提交的是中文返回的结果是??。(我的是mysql数据库)
解决中文乱码综述:
①在遇到中文乱码比如‘?’时,可以先看下面解决办法的第一步,如果按照第一步操作之后仍然未解决,接下来继续第二步,第三步以及第四步的问题排查。ps:之所以先看数据库,是因为我的tomcat配置文件server.xml,web.xml,以及mybatis连接数据库的xml都做了编码同一为utf-8。
下面主要记录自己解决乱码时的排除的方法:
第一步:
1.1.检查mysql数据库的编码格式这是我在排除其他方法后的,是最终解决问题的的一个。所以我先说下关于mysql编码格式的修改。总的来说就是show create table t_user;然后复制出表结构,将所有字符集设置为utf8。具体操作细节记录如下:
1.1 首先查看数据表的字符集:show create table t_user;
1.2 使用语句修改数据库编码格式:alter table t_user default character set utf8;修改后发下只是修改了表的编码,但是字段的编码仍然未修改。
1.3 接下来我简单粗暴的drop table t_user,然后重新建表,就是在建表的过程中就修改表字段的编码,如下图建表
1.4 重新建表后查询 show create table t_user;我发现字段的编码格式消失了,只有表的编码,我当时想就是有戏,果然,我再次重新插入数据时乱码消失。
第二步:
2.1 检查web.xml,查看有无关于编码过滤器的处理。
<!-- 解决工程编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
第三步:
3.1 检查mybatis连接数据库的配置文件xml,如下图:是在实例后面添加了数据库更新时的结果集设置
(?useUnicode=true&characterEncoding=utf8)
【注意:由于xml中的符号 & 不能被数据库系统识别,所以需要转义为 & 】
第四步:
4.1 检查tomcat的配置文件server.xml,在对应端口下添加字符编码,解决在get时字符乱码的问题
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>