做浏览全部档案页面时,jsp页面显示从数据库取出的数据时,出现中文乱码,从页面插入数据到数据库中时,数据库中出现(??)乱码,纠结了六个小时之后(蠢萌的自己)也没解决
第二天下午,无意中解决了。
说一下所有出现中文乱码大致的解决过程:
(1)JSP 中字符集的设置:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
(2)HTML 中字符集的设置:
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
</head>
(3)Tomcat 处理 GET 请求的字符集设置:
根目录下server.xml配置文件中:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>
(4)Tomcat 处理 POST 请求的字符集设置:
web.xml配置字符过滤器中:
<filter>
<filter-name>characterEncodingFilter</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>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(5)配置 JDBC 连接数据库的字符集为 UTF-8:
jdbc:mysql://localhost:3307/Ssmtest?useUnicode=true&characterEncoding=UTF-8
现在说的就是最关键的了!!!我就是蠢蠢的在这卡了6个小时!
数据库的编码格式要设为utf-8,千万别不屑一顾、上货:
(6)最好在创建数据库连接,数据库,表,字段时,字符集都设为utf-8
(7)发现数据库中也乱码时,通过 Show variables like 'character%';
查询一下是不是这样:
character_set_client = utf8;
character_set_results = utf8;
character_set_connection = utf8;
character_set_database = utf8;
character_set_server = utf8;
如果不是的话,可以
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_server = utf8;
但是会发现,设完之后,重启mysql,他会还原,那么就要去配置文件中永久更改,我找了很多博客,基本都不行,最后总结了一个解决了,如下:
前往mysql根目录下的my.ini文件里改成这样
[client]
port=3307 (自己的端口)
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
init-connect='set names utf8'
这样即使重启了mysql,通过 Show variables like 'character%'; 查询后会发现都变成了utf-8了。
这样就完了吗?不,没有,我在找问题的前两个小时,就做到以上所有了,但还是没有解决,直到刚刚、、我是这样解决了的:
我一般用Navicat Premium 打开mysql数据库,我发现,用mysql命令提示符方式查看编码都是utf-8,但在这上面这三个不是
character_set_client
character_set_results
character_set_connection
所以一直很懵逼,不知道怎么办,解决问题之后,我在想会不会是因为mysql根目录下的charsets文件夹中没有utf-8字符集的xml文件,题外话不说了,如下:
在 Navicat Premium 中,右键单击你的连接,编辑连接,在高级里面看看编码是否为:65001(UTF-8) ;看到这个心都凉了,如果不是,改过来说不定就好了
所以事实上要这样----->如果上面的操作你也都做好了没毛病的话,惊喜来了,一步到位!!!看下面:
再次回到之前的操作,在 Navicat Premium 中,右键单击你的连接,编辑连接,在高级里面将编码改为 Current Windows Codepage
你会发现,可以了,无论jsp页面还是数据库中,都能正常了,提醒一下,把之前已经乱码的数据删掉重新加一下数据就好了
总结一下:内心非常崩溃,突然感觉自己不适合做这一行了都,虽然我现在算个初级的小白、、、,找问题很累,找不到很难受,找出来之后内心喜悦感爆炸
以上就是我这次的操作了、、互相记录分享。
ps:大力感谢此博客:https://blog.csdn.net/zhangchen124/article/details/78432654,帮我找出了问题关键所在、、。