在移植过程中,最常见的问题之一就是字符集乱码,甚至有时候在上线一段时间后还会发现某些特殊中文字出现乱码,我们也经常会遇到来自于客户这样的疑问:“应用在Tomcat上跑的好好的,怎么一到Apusic上就乱码呢”。事实上并不是说Tomcat下没有乱码问题,只是因为通常在调试测试阶段都是使用Tomcat,可能在开发阶段已经规避了这个问题,比如使用Filter的方式进行了转码。
实际上Apusic也有一些关于字符集的参数,而且不需要编写代码,更节省工作量,也更高效。
参数一:
在$APUSIC_HOME(4.0.3)或$DOMAIN_HOME(5.0及以上)目录下的config/web.xml中增加以下参数:
<context-param>
<param-name>request.charsetencoding</param-name>
<param-value>GBK</param-value>
</context-param
>
这个参数的适用场景如下:
当使用request来传递带有中文字符的参数时,可以使用这个参数来设置字符集的类型,其中的param-value可以根据应用的实际需要设置成:
gb2312、GBK、UTF-8等。
参数二:
在$APUSIC_HOME(4.0.3)或$DOMAIN_HOME(5.0及以上)目录下的的config/apusic.conf中的
WebService服务中增加参数:
<ATTRIBUTE NAME="URIEncoding" VALUE="GBK"/>
修改后的apusic.conf的WebService服务如下:
<SERVICE
CLASS="com.apusic.web.WebService"
>
<ATTRIBUTE NAME="MaxWaitingClients" VALUE="500"/>
<ATTRIBUTE NAME="WaitingClientTimeout" VALUE="5"/>
<ATTRIBUTE NAME="KeepAlive" VALUE="true"/>
<ATTRIBUTE NAME="KeepAliveTimeout" VALUE="15"/>
<ATTRIBUTE NAME="MaxKeepAliveRequests" VALUE="100"/>
<ATTRIBUTE NAME="MaxKeepAliveConnections" VALUE="300"/>
<ATTRIBUTE NAME="NumberSelectors" VALUE="1"/>
<ATTRIBUTE NAME="ServletReloadCheckInterval" VALUE="3"/>
<ATTRIBUTE NAME="EnableLog" VALUE="False"/>
<ATTRIBUTE NAME="LogFileName" VALUE="logs/access.log"/>
<ATTRIBUTE NAME="LogFileLimit" VALUE="1000000"/>
<ATTRIBUTE NAME="LogFileCount" VALUE="10"/>
<ATTRIBUTE NAME="URIEncoding" VALUE="GBK"/>
</SERVICE>
这个参数的适用场景如下:
1、 在jsp中使用redirect方式进行页面跳转时带有中文参数;
2、 在jsp中使用windows.open()方式打开新窗口时带有中文参数;
3、 在常见的点击左侧树状菜单项右侧内容区域展示不同页面时需要传递中文参数。
类似上述情况的在URI中传递中文时出现了乱码,这个参数基本上都可以解决问题。
上面的两个参数可以解决大多数情况下的中文乱码问题,当然偶尔也会遇到解决不了的问题,那就需要对问题进行具体的分析了,如果有源码可以进行断点跟踪,没有的话也可以使用一些辅助工具。
注:本文内容来自我的同事宋凯的总结