最近完成一个项目,其中遇到了两次比较诡异的乱码问题,在这里记录一下,给自己提个醒,也为后来者提供参考。
这是一个用SSH实现的项目,为了防止乱码,从数据库到页面编码,再到struts的默认编码方式全部设置为了utf-8(具体设置方式网上有很多资料啦,这里不赘述了),以为这样就能没有后患了,但事情发展没有这么顺利。
1. 使用post的方式提交表单一切数据正常,使用get的方式提交表单则会有中文乱码。这是因为URL的编码问题产生的,URL的默认编码并不是utf-8,所以需要在Tomcat的conf文件夹下修改server.xml中的加入URIEncoding="UTF-8"
<Connector URIEncoding="UTF-8"connectionTimeout="20000" port="8080"protocol="HTTP/1.1" redirectPort="8443"/>
2.页面所有数据显示正常,包括中文等,没有乱码。但是打开源文件发现只要是通过struts标签从后台拿到的数据都是乱码,类似一堆数字。在一般情况下,这个问题没什么影响,毕竟页面显示正常,但是在显示由富文本框提交的显示的数据时,会直接打印出标签信息,而不是进行解析,如本应显示粗体<b>,会直接打印<b>...</b>。刚开始很困惑,后来一想,从后台拿来的数据都是正常的,为什么到了页面就会出现这种情况,问题肯定出在struts标签上,后来一查Tag Reference,发现<s:property/>有个属性叫escape默认为true,意思是会跳过对html的解析,所以只要设置escape="false"就不会有问题了,再回头看源文件,内容页正常了。