一是Http Header中的URL参数,比如<a href=”test.jsp?param1=中文参数1¶m2=中文参数2>这类传参时的中文,这种中文编码的解决办法最好是让应用服务器来做,比如我们最常用的Tomcat配置URI的方法如下(Tomcat5.X以上必须设定该参数,否则它会采用一种非ISO-8859-1的编码方式,这样即使服务端再request.setCharaterEncoding()都没法了,必定乱码!):
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" acceptCount="100" debug="0" connectionTimeout="20000" proxyPort="80" disableUploadTimeout="true" URIEncoding="UTF-8"/>
二是http请求中body部分的中文,这就是表单中的数据了,这部分ajax的HttpRequest有专门的方法设置:如下所示:
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');
这样Http Body部分的中文就都已经编码为UTF-8了。,
好了,既然客户端浏览器发送ajax请求时请求的内容都已经用UTF-8编码了,那么传到服务端的数据就已经是编码后的中文数据了,服务端的request就不需要通过request.SetCharaterEncodin()方式再设定编码格式了。这点跟Struts是最大的区别,我们通常看到的Struts对编码问题的解决是通过过滤器,即对所有发送到后台服务端的请求都实现通过这个过滤器,在这个过滤器中设定

