当我们访问的时候,又出现乱码了!
于是我按照上面的方式,把request对象设置编码为UTF-8试试
request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name");
- 结果还是乱码。这是为什么呢?我明明已经把编码设置成UTF-8了,按照post方式,乱码问题已经解决了!。我们来看看get和post方式的区别在哪?为什么post方式设置了request编码就可以解决乱码问题,而get方式不能呢。
- 首先我们来看一下post方法是怎么进行参数传递的。当我们点击提交按钮的时候,数据封装进了Form Data中,**http请求中把实体主体带过去了【传输的数据称之为实体主体】,既然request对象封装了http请求,所以request对象可以解析到发送过来的数据,于是只要把编码设置成UTF-8就可以解决乱码问题了。
而get方式不同,它的数据是从消息行带过去的,没有封装到request对象里面,所以使用request设置编码是无效的。
要解决get方式乱码问题也不难,我们既然知道Tomcat默认的编码是ISO 8859-1,那么get方式由消息体带过去给浏览器的时候肯定是用ISO 8859-1编码了。
//此时得到的数据已经是被ISO 8859-1编码后的字符串了,这个是乱码 String name = request.getParameter("username"); //乱码通过反向查ISO 8859-1得到原始的数据 byte[] bytes = name.getBytes("ISO8859-1"); //通过原始的数据,设置正确的码表,构建字符串 String value = new String(bytes, "UTF-8");
上面的代码有些难理解,我画张图说明一下:
经过我们手工转换,再来访问一下
- 好的,成功解决掉乱码问题了。
- 除了手工转换,get方式还可以改Tomcat服务器的配置来解决乱码,但是不推荐使用,这样不灵活。“
- 我们都知道Tomcat默认的编码是ISO 8859-1,如果在Tomcat服务器的配置下改成是UTF-8的编码,那么就解决服务器在解析数据的时候造成乱码问题了
- 在8080端口的Connector上加入
URIEncoding="utf-8",设置Tomcat的访问该端口时的编码为utf-8,从而解决乱码,这种改法是固定使用UTF-8编码的
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8"/>





