Struts2:中文乱码问题
1.中文乱码问题到处都有,因为编码格式一人一套,页面有页面编码格式,action有action编码格式,servlet有servlet编码格式,数据库有数据库编码格式,而且不同数据库还有不同的格式,五花八门,应有尽有。
如果网页要支持国际化,那字符编码格式只能是选择UTF-8,别的都不好使。而我们平时选择的中文编码格式一般是gb2312和gbk,因为这两个对中文支持性最好,尤其是gbk。
在开发一个WEB项目时,最好统一一种编码格式,比如统一为gb2312,那就不要在某些页面又用gbk,自己把自己弄乱了。
2.数据库,例如MySQL,它在创建数据库表的时候最容易出现字符编码的问题,因为它默认的是字符编码格式为latin1,用MySQL数据库搞开发的人应该都被它的一顿乱码乱晕过。在用MySQL创建数据库,创建数据库表时最好都特别指定编码格式,如下:
在MySQL那个黑不拉叽的窗口下执行
创建一个数据库xiaoqi
create database xiaoqi CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;
创建一个表user
create table users (
userId int not null primary key auto_increment,
userName varchar(20) not null,
userPassword varchar(20) not null,
userNickname varchar(20) not null
)TYPE = MYISAM CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;
是不是就这样呢,不是,麻烦着呢,在插入数据的时候还得指定:
先执行命令:set names ‘gb2312‘;
然后再向表中插入中文信息:insert into user values (null,‘xiaoqi‘,‘xiaoqi0101‘,‘小起‘);
想在这个黑窗口中查询表,也得保证执行过set names ‘gb2312‘命令,也就是说把中文信息扔到表里面去,和把中文信息从表里面提出来,都要执行set names ‘gb2312‘,这里说的是在这个黑窗口中显示查询结果时需要这么设置。还有,这个窗口关掉后,再打开时,该命令效果消失...
有没有简单一点的方法,有,用MySQL管理工具来操作数据库,和使用SQL SERVER2000的查询分析器工具类似。MySQL管理工具里面有设置字符编码格式的地方,一次设置,终身使用,绝不反弹...
3.解决数据库的乱码问题后,我们就可以从数据库中取出中文信息并显示在页面中。但是,这只是提取数据库中已经存在的中文信息。想要通过页面往数据库中添加中文信息,现在还不行,Struts2框架提供了一个很简单的解决方法,那就是,在struts.xml文件中添加下述语句:
<constant name="struts.i18n.encoding" value="gb2312"/>
它的位置最好放在最前面,<struts></struts>根元素下面的第一位置。
4.上面的方法还只解决了post传值的乱码问题!什么意思呢,就是说当我们用post方法传送数据时没有中文乱码问题了,但是get方法传值还是有。
我们页面中的表单提交一般用的是post方法,如果不是用的这个方法,或者没有去指定method="post",那从现在开始养成尽量用post方法提交的习惯。
不过有时候没法设置成post传值,比如url超链接传值,例:<a href="aaaa.jsp?name=小起"></a>,这个时候,我们定义的什么过滤器都不好使,啥原因呢,因为过滤器不过滤get传值,而超链接是用get方法传值的,所有这个时候就得另外想办法,比如说在我们用的Tomcat的conf文件夹中找到server.xml,在该文件中找到<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />,打开该文件的时候尽量用编辑器,不要用什么破记事本,因为用记事本打开的话,里面一团黑,哪些地方是正文,哪些地方是注释可难分开。找到前面那句话,它里面定义的port参数就是我们的端口号8080,也就是说要改端口号也是在这句话里面改,现在我们要在里面添加一个参数URIEncoding="gb2312"。好了,现在get方法传值也是用gb2312编码了,真麻烦!
转自http://blog.csdn.net/nature_fly088/article/details/7749038