为什么get post会产生乱码?

GET

我们一般会把中文进行utf-8 urlencode,然后拼到url后面。 但是在servlet/jsp中用request.getParameter("kw")拿出来然后在urldecode的话还是乱码。为什么会发生这个问题呢? 原来tomcat默认会用iso-8859-1对字符进行urldecode,所以我们decode后还是乱码。 解决办法为

new String(request.getParameter("kw").getBytes("ISO-8859-1"),"UTF-8") 


或者更改tomcat的server.xml让tomcat用UTF-8 decode。

<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> 


POST

保证你的html是用UTF-8编码的。 在head里面包含

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>


这样浏览器会以meta中指定的字符集对form里面的数据进行编码。这里我们需要在调用request.getParameter("kw")之前调用request.setCharacterEncoding("UTF-8")。看看这个访问的javadoc

引用
    /**
     * Overrides the name of the character encoding used in the body of this
     * request. This method must be called prior to reading request parameters
     * or reading input using getReader().
     *
     * @param env a <code>String</code> containing the name of
     * the chararacter encoding.
     *
     * @throws java.io.UnsupportedEncodingException if this is not a valid encoding
     */


这个可以指定request body的字符集(所以这个方法对于get是没有用的,get的参数不是在request body里面。)。

POST中只要调用request.setCharacterEncoding("UTF-8")然后request.getParameter("kw")就能拿到正确的结果了。

参考: http://wdlisoft.iteye.com/blog/522026

你可能感兴趣的:(java,tomcat,jsp,浏览器,servlet)