http请求是以ISO-8859-1的编码来传送url的如果页面的content-type为utf-8,那么在发送请求时,会将字符转成utf-8后进行传送 如: 中 的UTF-8编码为:E4 B8 AD在请求时为%E4%B8%AD字节之间是%分隔,那么服务器收到这段字节流后,必须将它转成相应的字符,直接使用request.getParameter("name")得到的是UTF-8转换成ISO-8859-1后的比特流按照UTF-8格式生成的字符串(系统自动完成),因此会出现乱码。
解决:
byte[] searchBytes = request.getParameter("q").getBytes("ISO-8859-1"); String searchStr = new String(searchBytes, "UTF-8");