由于操作系统、浏览器、数据库、JVM采用的字符集都不一样,基于Weblogic Server开发的应用经常出现中文显示乱码问题。
1. 在JSP文件头加入
< %@ page contentType="text/html; charset=GBK" % >
指定该JSP采用的字符集。
2.在Weblogic.xml文件的< jsp-descriptor >中加入:
< jsp-param >
< param-name >encoding< /param-name >
< param-value >GBK< /param-value >
< /jsp-param >
指定JSP文件中采用的字符集,在JSP文件中的< %@ page contentType="text/html; charset=GBK" % >会覆盖该设置
3.在Weblogic.xml文件的< jsp-descriptor >中加入
< jsp-param >
< param-name >compilerSupportsEncoding< /param-name >
< param-value >true< /param-value >
< /jsp-param >
如果为TRUE,指定在编译JSP文件时,采用在JSP文件中定义的
< %@ page contentType="text/html; charset=GBK" % >或< jsp-descriptor >中定义的encoding参数中定义的字符集进行编码,如果为FALSE,则采用JVM中默认指定的字符集进行编码。
4. web.xml和weblogic.xml中的mime的设置
在web.xml中可以指定mime映射,同时也可以指定对应类型使用的字符编码 比如:
<mime-mapping>
<extension>html</extension>
<mime-type>text/html; charset=UTF-8</mime-type>
</mime-mapping>
在weblogic.xml中可以设置默认的mime类型和字符编码
<container-discriptor>
<default-mime-type>text/html; charset=UTF-8</default-mime-type>
</container-discriptor>
还有,Weblogic Server需要把HTTP request(GET 和POST)中的数据从它的原始编码转化为Unicode,以便Java servlet API进行处理
<weblogic-web-app>
<charset-params>
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>UTF-8</java-charset-name>
</input-charset>
</charset-params>
</weblogic-web-app>
5. 在项目中遇到一次,唯一有用的方法,在setDomainEnv.sh中,JAVA_OPTIONS=""内容的最后添加-Ddefault.client.encoding=GBK -Dfile.encoding=GBK -Duser.language=Zh -Duser.region=CN
可以解决,但是日志中文会乱码,目前没有好的解决办法
6. 服务器环境 LANG(系统字符) 和NLS_LANG (和数据库有关字符)设置