中文乱码解决办法

我是用(Spring+struts2+hibernate)做的开发,然后统一用gbk作为编码。但还是出现了中文乱码的问题。

我做注册页面的时候,表单输入中文,注册成功后,mysql数据库中的数据为???乱码。

后来测试发现,从jsp页面传送的中文打印在eclispe后台就有问题;

再用junit单元测试,发现从eclipse后台传送到mysql数据库也有问题。悲剧了。

之后花了好长一段时间才逐一解决。(逐一解决,有个截断的思想和层的思想在这里面。)

1,(jsp-->Eclipse)

1)Struts2的国际化。

Struts.xml配置如下属性:

<constant name="struts.i18n.encoding" value="gbk" />

但似乎没有起作用。据说,2.1.7之前是个bug,之后才解决掉。

再看第二种办法。

2)Spring自带的过滤器CharacterEncodingFilter

 在web.xml中配置如下过滤器:

 1 <!--配置中文编码的过滤器 由spring管理  -->  
2 <filter>
3 <filter-name>encodingFilter</filter-name>
4 <filter-class>
5 org.springframework.web.filter.CharacterEncodingFilter
6 </filter-class>
7 <init-param>
8 <param-name>encoding</param-name>
9 <param-value>GBK</param-value>
10 </init-param>
11 <init-param>
12 <param-name>forceEncoding</param-name>
13 <param-value>true</param-value>
14 </init-param>
15 </filter>
16 <filter-mapping>
17 <filter-name>encodingFilter</filter-name>
18 <url-pattern>/*</url-pattern>
19 </filter-mapping>

很悲剧的,没起作用。还好最后从网上搜来了下面的办法。

3)将表单的提交方式改成post。

OK,解决了。我也不知道如何解释。

2,(Eclipse-->mysql)

我用的是客户端是Navicat for MySQL

下面补充下知识:

 MySQL的字符集支持细化到四个层次:服务器(server),数据库(database),数据表(table)和连接(connection)。

1)在安装配置MySql的时候,选择gbk字符集。

2)找到MySQL服务端的安装盘,找到my.ini文件。我的在C:\Program Files\MySQL\MySQL Server 5.1目录下。

[client]  default-character-set = utf8
[mysqld]  character_set_server =  utf8

然后重启mysql的服务。

3)使用命令

mysql> show variables like 'char%';

或者mysql> show variables like 'collation_%';

该命令可以查看数据库编码。

可以用命令去修改:

例如:mysql>  set character_set_client  =  gbk;

等等。。。

你也许可能发现,还是会出现乱码,那么看下面:

在发送查询之前,执行set names gbk;

相当于下面三条命令:
SET character_set_client = gbk;
SET character_set_results = gbk;
SET character_set_connection = gbk;

也不知道是我的运气背还是没用好,我的项目几乎都试了,没用。

最后从某个互联网旮旯搜到一处起死回生的招数:

①建数据库如下:

create database dbname DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

② 建表的时候,加一句:ENGINE=MyISAM DEFAULT CHARSET=gbk

create tbale tablename(

id int primary key,

name varchar(20)

)ENGINE=MyISAM DEFAULT CHARSET=gbk;

 

总结:我们总是在频繁的不断遇到问题,不断解决问题。这样我们有所提高,有点变态,但现实我们就是这么提高的。解决办法总是有很多,关键是找准咯。

原文地址:https://www.cnblogs.com/csuwangwei/p/2283652.html