乱码一个很令人头痛的问题。这里记下一些经验,好的习惯可以帮助你不操心这个问题:
1别指望用普通的new String(xxx.getBytes("ISO8859-1"),"UTF-8")的转换方式,这样不能集中管理,代码也很丑陋。
2jsp页面,或用作ajax载体的页面片段都要加
3用eclipse开发,别在editplus里写文本文件再直接将文件引进来,很可能汉字都会成乱码,拷贝粘贴无妨,eclipse可以识别。
4设置eclipse编辑jsp,html等文本文件保存的缺省编码方式为utf-8
具体在window>preferences>MyEclipse enterprise workbrench>files and editors>html(jsp)页面中的encoding,选择ISO10646/Unicode(UTF-8).
如果觉得有问题的时候,在Package那个view里,右键点开某个文件的属性,
也可以查看或者修改该文件格式的text file encoding,都选成utf-8吧
5我用jetty6部署测试的时候,出人意料的没有做过任何转码工作,一切正常
6用tomcat的时候就乱码了,分2步解决,一个是get一个是post
1)server.xml里<connector...加一个属性 URIEncoding="UTF-8"
这样get的可以解决,即
http://a.com/xx.action?para1=汉字
这种形式的,都能正常解析没问题。
2)在webapp的web-inf/web.xml里设置filter
当然要把tomcat自带的examples里的filters/SerCharacterEncodingFilter的class要拷贝到web-inf/classes路径里去。
这样可以解决post请求里的中文转码问题。
7数据库也要设置相关的编码为utf-8
这样一整套习惯性的流程下来,就基本不用考虑乱码问题了。如果其他应用服务器有类似问题的时候,尽量不要硬编码,而通过配置集中的解决问题,可以方便迁移时的调整。tomcat这个特例真是够贱的,枉为兵器谱排名最常用的java web容器,缺省编码竟然还是iso8859-1,且到了现在这个版本也没改。以后有关乱码的问题,在这个帖子里集中更新,方便查阅。
1别指望用普通的new String(xxx.getBytes("ISO8859-1"),"UTF-8")的转换方式,这样不能集中管理,代码也很丑陋。
2jsp页面,或用作ajax载体的页面片段都要加
<%@ page contentType="text/html; charset=UTF-8"%>
3用eclipse开发,别在editplus里写文本文件再直接将文件引进来,很可能汉字都会成乱码,拷贝粘贴无妨,eclipse可以识别。
4设置eclipse编辑jsp,html等文本文件保存的缺省编码方式为utf-8
具体在window>preferences>MyEclipse enterprise workbrench>files and editors>html(jsp)页面中的encoding,选择ISO10646/Unicode(UTF-8).
如果觉得有问题的时候,在Package那个view里,右键点开某个文件的属性,
也可以查看或者修改该文件格式的text file encoding,都选成utf-8吧
5我用jetty6部署测试的时候,出人意料的没有做过任何转码工作,一切正常
6用tomcat的时候就乱码了,分2步解决,一个是get一个是post
1)server.xml里<connector...加一个属性 URIEncoding="UTF-8"
这样get的可以解决,即
http://a.com/xx.action?para1=汉字
这种形式的,都能正常解析没问题。
2)在webapp的web-inf/web.xml里设置filter
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
当然要把tomcat自带的examples里的filters/SerCharacterEncodingFilter的class要拷贝到web-inf/classes路径里去。
这样可以解决post请求里的中文转码问题。
7数据库也要设置相关的编码为utf-8
这样一整套习惯性的流程下来,就基本不用考虑乱码问题了。如果其他应用服务器有类似问题的时候,尽量不要硬编码,而通过配置集中的解决问题,可以方便迁移时的调整。tomcat这个特例真是够贱的,枉为兵器谱排名最常用的java web容器,缺省编码竟然还是iso8859-1,且到了现在这个版本也没改。以后有关乱码的问题,在这个帖子里集中更新,方便查阅。