不管什么程序只要各个地方的编码一致,字符集选择合适,就不会有什么问题,但是往往是各个部分的编码不一致,导致问题,需要梳理各个可能出现问题的地方,找到不一致的地方来解决。
Java Web开发的编码地方很多,如果有不一致的,很容易出现乱码,梳理一下主要以下几个环节:
页面的编码: 指示生成html页面后的编码方式,让浏览器识别然后render,可以在页面中使用charset来设定。
request的编码: 把数据放到attribute,parameter发送请求的时候使用的编码,可以使用request.seCharacterEncoding来设定,可以写一个Filter来搞。
tomcat的对URL解析的编码: tomcat对url解析的默认的编码为iso-8859,可以通过server.xml中配置
<Connector URIEncoding="UTF-8" port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" />
中的URIEncoding来指定。
数据库连接的编码: 比如使用Unicode编码,可以在连接的url中添加参数useUnicode=true&characterEncoding=utf8
如果在xml中配置可以使用CDATA或者对&进行转义,因为&在xml有特殊的含义。
数据库本身的编码: 存到数据库中使用的编码,建表的时候设定编码。
BTW:GB18030字符集,IE有些版本,有bug会导致乱码。