请求参数中文乱码问题(POST)
请求参数中如果存在中文数据, 则会出现乱码
那么对于POST请求方式下的请求参数中有中文而引起的乱码问题我们要如何解决?
我们要解决POST请求下的请求参数的中文乱码问题,那么我们首先要知道什么原因导致了乱码,我们才能针对这个乱码问题去解决
- 我们其实因为我们的前端HTML页面中meta标签中的charset标签一般都是设置为UTF-8,也就是前端页面的编码字符集是UTF-8,而我们通过getReader()方法获取对应的字符串缓冲输入流时, 这个流默认采用的是ISO-8859-1字符集, 那么我们编码的时候是使用的UTF-8字符集, 解码的时候使用的是ISO-8859-1字符集,那么编码和解码的字符集不对应, 所以就会出现乱码的问题
- 那么我们只需要在解码时也是用UTF-8编码集就可以了,那么我们就要设置在获取对应的字符缓冲输入流时的编码
- 使用ServletRequest接口中定义的setCharacterEncoding()方法就可以修改获取输入流时的编码
- 这个方法是声明在ServletRequest接口中的, 但是这里传入肯定是实现类的对象, 目前我们都是以tomcat服务器来讲解的, 所以这里肯定是调用的RequestFacade实现类的中setCharacterEncoding()方法
小结: 对于POST方式的请求中的请求参数中有中文导致的乱码问题我们修改输入流的编码字符集即可 —> 通过RequestFacade对象调用setCharacterEncoding()方法即可,方法中传入一个String类型的"utf-8"
补充:
但是对于GET请求方式下的请求参数中有中文也是会引起乱码问题的, 但是此时对于GET方式下的请求参数有中文而导致的乱码问题我们不能通过设置输入流的编码的方式来解决, 因为我们的GET方式下的请求参数是通过getQueryString()方法获取的, 不是通过流的方式, 所以设置了流的编码字符集也没用
补充二:
其实不仅仅是我们获取请求参数的时候会出现中文乱码问题, 只要是在tomcat服务器中使用流的方法来获取request对象中的数据的时候, 或者是通过流的形式来将数据存储到response对象中的时候, 这个时候默认编码方式都是ISO-8859-1, 而我们的浏览器默认编码和解码格式都是UTF-8, 所以就会出现中文乱码问题 —> 所以: 只要通过流的方式获取request对象中的数据或者通过流的方式向response对象中写入数据的时候我们都要设置流的编码格式
- 注意:输入流和输出流的编码格式都要设置, 也就是我们使用request对象和使用response对象都是可以设置流的编码格式的, request设置的只是通过request对象获取的输入流的编码格式, response对象设置的只是通过response对象获取的输出流的编码格式, 两者是相互独立的, 并没有任何的联系