用SSH开发应用其中一个比较麻烦的事就是中文支持,包括jsp页面显示,get/post请求处理,java代码的字符串,后端数据库连接都需要考虑。为了简化这个过程,我们尽量在各个地方使用单一编码,推荐UTF-8。
下面以UTF-8为例罗列一下需要考虑的配置。
1. 一般我们的应用都跑在Tomcat上,Tomcat的配置文件server.xml需要为Connector添加URIEncoding配置,这样它解码中文才不会出现乱码。
2. jsp文件头部需要需要添加contentType和pageEncoding,html的meta中添加content-type。
3. 项目的web.xml中添加编解码filter,添加到其他filter前面。
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
false
CharacterEncodingFilter
/*
4. 在jdbc的连接url中加上charsetEncoding参数,这样连接后端数据库就会使用UTF-8编码
jdbc.url=jdbc:mysql://1.1.1.1:3306/foo?useUnicode=true&characterEncoding=UTF-8
5. 后端数据库也配置成UTF-8的,比如Mysql需要在my.cnf中client和mysqld域中添加字段。
[client]default-character-set=utf8[mysqld]character-set-server=utf8
6. 最后就是你的源码编辑器也设置成UTF-8,包括外部的资源文件,如果有个别需要转码的就在需要的时候转一下,比如8859转utf-8。
utfstring = new String(pstring.getBytes("iso-8859-1"), "UTF-8");
上面几点基本就包括了解决乱码的要点,依照坐下来一般就没啥问题了,剩下编码中只需要记住java内部用的UTF-16双字节编码,UTF-16就是交通枢纽。