post
原因:
对于POST方式,它采用的编码是由页面来决定的, 即ContentType("text/html; charset=GBK")。
1. 提交表单时,浏览器会根据ContentType进行编码,然后提交给服务器,
2. 在服务器端也是用ContentType中设置的字符集来进行解码,所以POST提交的参数一般而言都不会出现乱码问题。当然这个字符集编码我们是可以自己设定的:
解决:给请求对象设置和页面ContentType相同的格式来解码
request.setCharacterEncoding(charset)
request.getParameter获得正确的数据。
get
原因:
1. 客户端一般是通过用UTF-8或GBK等对请求数据进行编码的,
2. 到了服务器却默认用iso-8859-1方式解码。
解决:
//以iso-8859-1的形式解码后,按UTF-8格式重新编码来获取正确数据
String name = request.getParameter("name") ;
new String( name.getBytes("iso-8859-1") , "utf-8")