get请求中文乱码问题

来源:互联网 发布:阿里云服务器磁盘io 编辑:程序博客网 时间:2024/05/30 04:42

由于GET请求与POST请求服务端接收时的处理方式不同,而GET请求提交的数据会被放到URL后面带到服务器,而URL后面携带中文字符要进行编码,通常前端会进行encode,比如UTF-8 。这时我们在服务器的接收端可以进行一下统一进行解码,按


1. 在Jboss的配置文件中进行配置

   <Connector port="8080" address="${jboss.bind.address}"
                maxThreads="250" maxHttpHeaderSize="8192"
                emptySessionPath="true" protocol="HTTP/1.1"
                enableLookups="false" redirectPort="8443" acceptCount="100"

                connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>



在jetty中设置:

官方文档:http://docs.codehaus.org/display/JETTY/International+Characters+and+Character+Encodings

在jetty6中是:

  1. call Request.setQueryEncoding(String) before reading any of the content or params.
  2. set the system property org.mortbay.util.URI.charset to the encoding you want to use.
通常用方法2较好可以不用侵入代码,只需要在启动jetty脚本加上:-Dorg.mortbay.util.URI.charset=utf-8


2. Jetty中URI编码的设置

http://www.021128.net/2009/03/26/jetty%E4%B8%ADuri%E7%BC%96%E7%A0%81%E7%9A%84%E8%AE%BE%E7%BD%AE/

 

当我不得不通过URL传递中文参数时,发现在jetty中必须通过UTF-8对中文进行URLEncoding,后台才能够正确显示。但我们的生产环境是用的WAS,可以直接传递中文参数。原来,在我们的servlet获取URL参数之前,servlet容器已经对URL中的参数做了一次解析处理,jetty默认是UTF-8的编码,所以使用utf-8编码的URL参数可以正常解码,使用GBK编码的参数就全变问号了。

 

解决这个问题,直接在JVM参数中添加-Dorg.mortbay.util.URI.charset=GBK即可,官方的说明在这里http://docs.codehaus.org/display/JETTY/International+Characters+and+Character+Encodings

 

Tomcat的配置方法网上一大堆,只需要在server.xml的Connector中添加URIEncoding参数就可以了,官方说明在这里http://wiki.apache.org/tomcat/FAQ/Connectors#Q8

 

3. 假设服务器默认编码为gbk,如果不修改服务器默认编码,解决方式如下:

    在前端对传过去的中文参数做编码处理:statusmemo=encodeURI(encodeURI(statusmemo));

    在后端的处理:statusmemo=URLDecoder.decode(statusmemo, "utf-8");

  




0 0
原创粉丝点击