Response与Request中文乱码的解决

在使用 Java Servlet 开发网站的时候经常会遇到中文乱码问题,不管是请求(request)还是响应(response)的过程,下面就是中文乱码的一个简单总结:

  • 字符流数据写入

在Servlet中,如果向浏览器写入的内容是中文格式,会由于HttpServletResponse本身的原因(默认编码格式为ISO8859-1,不支持中文格式),所以在浏览器中不会被识别到。

Response与Request中文乱码的解决_第1张图片

中文是属于UTF-8格式,所以需要设置Response以UTF-8的格式写入数据。设置的方法是使用setCharcterEncoding("UTF-8")设置。

Response与Request中文乱码的解决_第2张图片

如果只是使用response.setCharacterEncoding("utf-8")的形式只会让服务器写入的数据为UTF-8的形式。但是客户端浏览器的解析编码格式未进行设置,所以同样也还会出现乱码的情况。

Response与Request中文乱码的解决_第3张图片 未通知浏览器以UTF-8解析​​​​​​

因此需要同时通知浏览器以UTF-8的格式来解析数据。设置的方式可以通过两种方式,如下:

// 第一种:包含了response.setCharacterEncoding("UTF-8")
response.setContentType("text/html;charset=UTF-8");
// 第二种:需要和response.setCharacterEncoding("UTF-8")配合使用
response.setHeader("Content-Type","text/html;charset=UTF-8");
  • 字节流写入

字节流多数用于上传图片,一般情况下会因为上传文件的名字是中文格式,会由于解析不出来而出错,所以在使用字节流实现下载功能时,要修改图片名字的编码格式。

  • Get请求乱码

在Get方式提交表单时会出现中文乱码的问题,这是因为在Tomcat的底层是采用的是ISO8859-1,所以在使用前需要先对内容进行编码转换。

Response与Request中文乱码的解决_第4张图片

格式编码转换设置:

String values = request.getParameter("username");
System.out.println(new String(values.getBytes("ISO8859-1"), "UTF-8"));
  • Post请求乱码

Get的解决乱码方式只对Get方法有效,而对Post方式是无效的。它的解决方式是如下:

Response与Request中文乱码的解决_第5张图片

 

 

你可能感兴趣的:(Java,Web,servlet,乱码)