Web项目开发过程中经常遇到中文乱码的问题。一般项目都使用UTF-8编码,在项目的初始阶段都要对项目、环境的文件编码进行设置。除了项目文件的编码外,常见的编码问题有如下几点:
一、URL中传递中文参数,后台获取请求参数时,输出中文乱码。
原因:tomcat使用的默认编码方式是iso8859-1。
解决:修改tomcat/conf/server.xml中如下代码,添加属性:URIEncoding="UTF-8",即可让Tomcat以UTF-8的编码处理get请求。
<Connector port="90" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
二、JDK编码问题
程序中使用String.getBytes()等使用JAVA默认编码的函数时,得到错误的结果,这时候不得不使用指定编码的方式调用。这时候可以打印下系统默认编码:
Sytem.getProperty("file.encode"),结果肯定非UTF-8。
解决:在容器的指定参数 中添加 UTF-8编码,如Tomcat,修改catalina.sh:
set Java_OPTS=%JAVA_OPTS% -Dfile.encoding=utf-8
wondows环境,这样设置dos窗口会有乱码,这是因为window默认的gbk编码 有关,程序中编码是正常的。当然Linux环境中也可以通过修改系统默认编码解决(/etc/sysconfig/i18n)。
三、spring mvc乱码,接口返回String结果时,中文乱码。
原因:如下图,配置spring mvc时使用StringHttpMessageConverter类,默认编码为ISO-8859-1。
解决:自实现Converter类,最简单的解决方法,复制StringHttpMessageConverter类源码,修改默认编码为UTF-8,轻松解决。
四、log4j日志中中文乱码
原因:log4j使用的默认GBK编码
解决:在配置文件 log4j.properties中每个用到的Appender添加 UTF-8编码限制。
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Encoding=UTF-8
log4j.appender.console.layout=org.apache.log4j.PatternLayout