request.getParameter()中文乱码

原因:

  Http请求传输时将url以ISO-8859-1编码,服务器收到字节流后默认会以ISO-8859-1编码来解码成字符流(造成中文乱码)。

解决办法:

  客户端向服务器端发送信息,如果发送的编码和服务器端接收的编码不一样,使用request.getParameter()方法获取的表单信息会产生乱码。所以需要设置服务器的编码,以Tomcat为例。打开Tomcat/conf目录下的server.xml文件,在connetor属性中增加URIEncoding或者useBodyEncodingForURI属性。

<Connector port="8080" protocol="HTTP/1.1"   
    connectionTimeout="20000"   
    redirectPort="8444"   
    useBodyEncodingForURI="true" URIEncoding="<span style="font-family: 宋体; font-size: 16px;">GB18030</span>"/>  


  重点在userBodyEncodingForURI 和 URIEncoding 这两个属性,下面来解释一下这两个属性的意义: 


  useBodyEncodingForURI参数表示是否用request.setCharacterEncoding参数对URL提交的数据和表单中GET方式提交的数据进行重新编码,在默认情况下,该参数为false。

 

  URIEncoding参数指定对所有GET方式请求进行统一的重新编码(解码)的编码。


问题:

  以前解决中文乱码,只需要在Servlet中加上request.setCharacterEncoding("GB18030")就可以解决,这次却不起作用,而且必须在Tomcat中开启useBodyEncodingForURI属性=true。绝知此事要躬行,大家有遇到吗?

你可能感兴趣的:(java,tomcat,web开发,编码,乱码)