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